Refactor package management API

To make backtraces a little less cluttered, in case of the notorious
arrayp error, which I am yet unable to reproduce or understand.
This commit is contained in:
Henrik Lissner 2018-06-02 21:31:14 +02:00
parent 6e6dfc2215
commit 1a1d74afa3
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -409,8 +409,7 @@ calls."
"QUELPA -> ELPA")) "QUELPA -> ELPA"))
((plist-get (cdr pkg) :recipe) ((plist-get (cdr pkg) :recipe)
"QUELPA") "QUELPA")
(t ("ELPA"))))
"ELPA"))))
(cl-sort (cl-copy-list packages) #'string-lessp (cl-sort (cl-copy-list packages) #'string-lessp
:key #'car) :key #'car)
"\n"))))) "\n")))))
@ -421,18 +420,24 @@ calls."
(dolist (pkg packages) (dolist (pkg packages)
(print! "Installing %s" (car pkg)) (print! "Installing %s" (car pkg))
(doom--condition-case! (doom--condition-case!
(print! "%s%s" (let ((result
(cond ((and (package-installed-p (car pkg)) (or (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"))) 'already-installed)
((doom-install-package (car pkg) (cdr pkg)) (and (doom-install-package (car pkg) (cdr pkg))
(setq success t) (setq success t)
(green "✓ DONE")) 'success)
((red "✕ FAILED"))) 'failure))
(if (plist-member (cdr pkg) :pin) (pin-label
(format " [pinned: %s]" (plist-get (cdr pkg) :pin)) (and (plist-member (cdr pkg) :pin)
"")))) (format " [pinned: %s]" (plist-get (cdr pkg) :pin)))))
(print! "%s%s"
(pcase result
(`already-installed (dark (white "⚠ ALREADY INSTALLED")))
(`success (green "✓ DONE"))
(`failure (red "✕ FAILED")))
(or pin-label "")))))
(print! (bold (green "Finished!"))) (print! (bold (green "Finished!")))
(if success (doom-delete-autoloads-file doom-package-autoload-file)) (if success (doom-delete-autoloads-file doom-package-autoload-file))
success))))) success)))))
@ -492,34 +497,31 @@ calls."
((not ((not
(or auto-accept-p (or auto-accept-p
(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) (let ((backend (doom-package-backend sym)))
(format "+ %s (%s)" sym (format "+ %s (%s)" 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")))))
(error "Aborted!")) (error "Aborted!"))
((let (success) ((let (success)
(dolist (pkg packages) (dolist (pkg packages)
(doom--condition-case! (doom--condition-case!
(print! (let ((result (doom-delete-package pkg t)))
(let ((result (doom-delete-package pkg t))) (if result (setq success t))
(when result (setq success t)) (print! (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)))))
(print! (bold (green "Finished!"))) (print! (bold (green "Finished!")))
(if success (doom-delete-autoloads-file doom-package-autoload-file)) (if success (doom-delete-autoloads-file doom-package-autoload-file))
success))))) success)))))