Refactor package managent batch commands

+ Replace message! with print!
+ doom//packages-* commands now only return t if package list changed
This commit is contained in:
Henrik Lissner 2018-05-20 12:03:46 +02:00
parent 0d9db6f149
commit 61ca98fd3f
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -26,15 +26,15 @@
(condition-case ex2 (condition-case ex2
(progn ,@body) (progn ,@body)
('file-error ('file-error
(message! (bold (red " FILE ERROR: %s" (error-message-string ex2)))) (print! (bold (red " FILE ERROR: %s" (error-message-string ex2))))
(message! " Trying again...") (print! " Trying again...")
(quiet! (doom-refresh-packages-maybe t)) (quiet! (doom-refresh-packages-maybe t))
,@body)) ,@body))
('user-error ('user-error
(message! (bold (red " ERROR: %s" ex)))) (print! (bold (red " ERROR: %s" ex))))
('error ('error
(doom--refresh-pkg-cache) (doom--refresh-pkg-cache)
(message! (bold (red " FATAL ERROR: %s" ex)))))) (print! (bold (red " FATAL ERROR: %s" ex))))))
(defun doom--refresh-pkg-cache () (defun doom--refresh-pkg-cache ()
"Clear the cache for `doom-refresh-packages-maybe'." "Clear the cache for `doom-refresh-packages-maybe'."
@ -336,152 +336,147 @@ package.el as appropriate."
(defun doom//packages-install () (defun doom//packages-install ()
"Interactive command for installing missing packages." "Interactive command for installing missing packages."
(interactive) (interactive)
(if (not noninteractive) (doom-initialize-packages)
(doom-packages--async-run 'doom//packages-install) (print! "Looking for packages to install...")
(message! "Looking for packages to install...") (let ((packages (reverse (doom-get-missing-packages))))
(let ((packages (reverse (doom-get-missing-packages)))) (cond ((not packages)
(cond ((not packages) (print! (green "No packages to install!"))
(message! (green "No packages to install!")) nil)
nil)
((not (or (getenv "YES") ((not (or (getenv "YES")
(y-or-n-p (y-or-n-p
(format "%s packages will be installed:\n\n%s\n\nProceed?" (format "%s packages will be installed:\n\n%s\n\nProceed?"
(length packages) (length packages)
(mapconcat (mapconcat
(lambda (pkg) (lambda (pkg)
(format "+ %s (%s)" (format "+ %s (%s)"
(car pkg) (car pkg)
(cond ((doom-package-different-recipe-p (car pkg)) (cond ((doom-package-different-recipe-p (car pkg))
"new recipe") "new recipe")
((doom-package-different-backend-p (car pkg)) ((doom-package-different-backend-p (car pkg))
(if (plist-get (cdr pkg) :recipe) (if (plist-get (cdr pkg) :recipe)
"ELPA -> QUELPA" "ELPA -> QUELPA"
"QUELPA -> ELPA")) "QUELPA -> ELPA"))
((plist-get (cdr pkg) :recipe) ((plist-get (cdr pkg) :recipe)
"QUELPA") "QUELPA")
(t (t
"ELPA")))) "ELPA"))))
(sort (cl-copy-list packages) #'doom--sort-alpha) (sort (cl-copy-list packages) #'doom--sort-alpha)
"\n"))))) "\n")))))
(message! (yellow "Aborted!")) (error "Aborted!"))
nil)
(t ((let (success)
(doom-refresh-packages-maybe doom-debug-mode) (doom-refresh-packages-maybe doom-debug-mode)
(dolist (pkg packages) (dolist (pkg packages)
(message! "Installing %s" (car pkg)) (print! "Installing %s" (car pkg))
(doom--condition-case! (doom--condition-case!
(message! "%s%s" (print! "%s%s"
(if (and (package-installed-p (car pkg)) (if (and (package-installed-p (car pkg))
(not (doom-package-different-backend-p (car pkg))) (not (doom-package-different-backend-p (car pkg)))
(not (doom-package-different-recipe-p (car pkg)))) (not (doom-package-different-recipe-p (car pkg))))
(dark (white "⚠ ALREADY INSTALLED")) (dark (white "⚠ ALREADY INSTALLED"))
(condition-case e (condition-case e
(if (doom-install-package (car pkg) (cdr pkg)) (if (doom-install-package (car pkg) (cdr pkg))
(green "✓ DONE") (prog1 (green "✓ DONE")
(setq success t))
(red "✕ FAILED")) (red "✕ FAILED"))
(error (error
(red "✕ ERROR (%s)" e)))) (red "✕ ERROR (%s)" e))))
(if (plist-member (cdr pkg) :pin) (if (plist-member (cdr pkg) :pin)
(format " [pinned: %s]" (plist-get (cdr pkg) :pin)) (format " [pinned: %s]" (plist-get (cdr pkg) :pin))
"")))) ""))))
(print! (bold (green "Finished!")))
(message! (bold (green "Finished!")))
(doom//reload-load-path) (doom//reload-load-path)
t))))) success)))))
;;;###autoload ;;;###autoload
(defun doom//packages-update () (defun doom//packages-update ()
"Interactive command for updating packages." "Interactive command for updating packages."
(interactive) (interactive)
(if (not noninteractive) (doom-initialize-packages)
(doom-packages--async-run 'doom//packages-update) (print! "Looking for outdated packages...")
(message! "Looking for outdated packages...") (doom-refresh-packages-maybe doom-debug-mode)
(doom-refresh-packages-maybe doom-debug-mode) (let ((packages (sort (doom-get-outdated-packages) #'doom--sort-alpha)))
(let ((packages (sort (doom-get-outdated-packages) #'doom--sort-alpha))) (cond ((not packages)
(cond ((not packages) (print! (green "Everything is up-to-date"))
(message! (green "Everything is up-to-date")) nil)
nil)
((not (or (getenv "YES") ((not (or (getenv "YES")
(y-or-n-p (y-or-n-p
(format "%s packages will be updated:\n\n%s\n\nProceed?" (format "%s packages will be updated:\n\n%s\n\nProceed?"
(length packages) (length packages)
(let ((max-len (let ((max-len
(or (car (sort (mapcar (lambda (it) (length (symbol-name (car it)))) packages) (or (car (sort (mapcar (lambda (it) (length (symbol-name (car it)))) packages)
(lambda (it other) (> it other)))) (lambda (it other) (> it other))))
10))) 10)))
(mapconcat (mapconcat
(lambda (pkg) (lambda (pkg)
(format (format "+ %%-%ds %%-%ds -> %%s" (+ max-len 2) 14) (format (format "+ %%-%ds %%-%ds -> %%s" (+ max-len 2) 14)
(symbol-name (car pkg)) (symbol-name (car pkg))
(package-version-join (cadr pkg)) (package-version-join (cadr pkg))
(package-version-join (cl-caddr pkg)))) (package-version-join (cl-caddr pkg))))
packages packages
"\n")))))) "\n"))))))
(message! (yellow "Aborted!")) (error "Aborted!"))
nil)
(t ((let (success)
(dolist (pkg packages) (dolist (pkg packages)
(message! "Updating %s" (car pkg)) (print! "Updating %s" (car pkg))
(doom--condition-case! (doom--condition-case!
(message! (print!
(let ((result (doom-update-package (car pkg) t))) (let ((result (doom-update-package (car pkg) t)))
(when result (setq success t))
(color (if result 'green 'red) (color (if result 'green 'red)
(if result "✓ DONE" "✕ FAILED")))))) (if result "✓ DONE" "✕ FAILED"))))))
(print! (bold (green "Finished!")))
(message! (bold (green "Finished!")))
(doom//reload-load-path) (doom//reload-load-path)
t))))) success)))))
;;;###autoload ;;;###autoload
(defun doom//packages-autoremove () (defun doom//packages-autoremove ()
"Interactive command for auto-removing orphaned packages." "Interactive command for auto-removing orphaned packages."
(interactive) (interactive)
(if (not noninteractive) (doom-initialize-packages)
(doom-packages--async-run 'doom//packages-autoremove) (print! "Looking for orphaned packages...")
(message! "Looking for orphaned packages...") (let ((packages (doom-get-orphaned-packages)))
(let ((packages (doom-get-orphaned-packages))) (cond ((not packages)
(cond ((not packages) (print! (green "No unused packages to remove"))
(message! (green "No unused packages to remove")) nil)
nil)
((not ((not
(or (getenv "YES") (or (getenv "YES")
(y-or-n-p (y-or-n-p
(format (format
"%s packages will be deleted:\n\n%s\n\nProceed?" "%s packages will be deleted:\n\n%s\n\nProceed?"
(length packages) (length packages)
(mapconcat (mapconcat
(lambda (sym) (lambda (sym)
(format "+ %s (%s)" sym (format "+ %s (%s)" sym
(let ((backend (doom-package-backend sym))) (let ((backend (doom-package-backend sym)))
(if (doom-package-different-backend-p sym) (if (doom-package-different-backend-p sym)
(pcase backend (pcase backend
(`quelpa "QUELPA->ELPA") (`quelpa "QUELPA->ELPA")
(`elpa "ELPA->QUELPA") (`elpa "ELPA->QUELPA")
(_ "removed")) (_ "removed"))
(upcase (symbol-name backend)))))) (upcase (symbol-name backend))))))
(sort (cl-copy-list packages) #'string-lessp) (sort (cl-copy-list packages) #'string-lessp)
"\n"))))) "\n")))))
(message! (yellow "Aborted!")) (error "Aborted!"))
nil)
(t ((let (success)
(dolist (pkg packages) (dolist (pkg packages)
(doom--condition-case! (doom--condition-case!
(message! (print!
(let ((result (doom-delete-package pkg t))) (let ((result (doom-delete-package pkg t)))
(when result (setq success t))
(color (if result 'green 'red) (color (if result 'green 'red)
"%s %s" "%s %s"
(if result "✓ Removed" "✕ Failed to remove") (if result "✓ Removed" "✕ Failed to remove")
pkg))))) pkg)))))
(message! (bold (green "Finished!"))) (print! (bold (green "Finished!")))
(doom//reload-load-path) (doom//reload-load-path)
t))))) success)))))
;; ;;