Improve error-handling for quelpa packages

This commit is contained in:
Henrik Lissner 2018-06-08 01:42:08 +02:00
parent 426935e4ee
commit 99d6927e56
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -258,6 +258,14 @@ Used by `doom//packages-install'."
;; Main functions ;; Main functions
;; ;;
(defun doom--delete-package-files (name-or-desc)
(let ((pkg-build-dir
(if (package-desc-p name-or-desc)
(package-desc-dir name-or-desc)
(expand-file-name (symbol-name name-or-desc) quelpa-build-dir))))
(when (file-directory-p pkg-build-dir)
(delete-directory pkg-build-dir t))))
;;;###autoload ;;;###autoload
(defun doom-install-package (name &optional plist) (defun doom-install-package (name &optional plist)
"Installs package NAME with optional quelpa RECIPE (see `quelpa-recipe' for an "Installs package NAME with optional quelpa RECIPE (see `quelpa-recipe' for an
@ -273,13 +281,14 @@ example; the package name can be omitted)."
(let* ((inhibit-message (not doom-debug-mode)) (let* ((inhibit-message (not doom-debug-mode))
(plist (or plist (cdr (assq name doom-packages))))) (plist (or plist (cdr (assq name doom-packages)))))
(if-let* ((recipe (plist-get plist :recipe))) (if-let* ((recipe (plist-get plist :recipe)))
(let (quelpa-upgrade-p) (condition-case e
(quelpa recipe)) (let (quelpa-upgrade-p)
(quelpa recipe))
('error (doom--delete-package-files name)
(signal (car e) (cdr e))))
(package-install name)) (package-install name))
(if (not (package-installed-p name)) (if (not (package-installed-p name))
(let ((pkg-build-dir (expand-file-name (symbol-name name) quelpa-build-dir))) (doom--delete-package-files name)
(when (file-directory-p pkg-build-dir)
(delete-directory pkg-build-dir t)))
(map-put doom-packages name plist) (map-put doom-packages name plist)
name))) name)))
@ -298,8 +307,11 @@ package.el as appropriate."
(desc (cadr (assq name package-alist)))) (desc (cadr (assq name package-alist))))
(pcase (doom-package-backend name) (pcase (doom-package-backend name)
(`quelpa (`quelpa
(let ((quelpa-upgrade-p t)) (condition-case e
(quelpa (assq name quelpa-cache)))) (let ((quelpa-upgrade-p t))
(quelpa (assq name quelpa-cache)))
('error (doom--delete-package-files name)
(signal (car e) (cdr e)))))
(`elpa (`elpa
(let* ((archive (cadr (assq name package-archive-contents))) (let* ((archive (cadr (assq name package-archive-contents)))
(packages (packages
@ -308,9 +320,7 @@ package.el as appropriate."
(package-compute-transaction () (list (list archive)))))) (package-compute-transaction () (list (list archive))))))
(package-download-transaction packages)))) (package-download-transaction packages))))
(unless (doom-package-outdated-p name) (unless (doom-package-outdated-p name)
(when-let* ((old-dir (package-desc-dir desc))) (doom--delete-package-files desc)
(when (file-directory-p old-dir)
(delete-directory old-dir t)))
t)))) t))))
;;;###autoload ;;;###autoload
@ -323,16 +333,12 @@ package.el as appropriate."
(let ((inhibit-message (not doom-debug-mode)) (let ((inhibit-message (not doom-debug-mode))
quelpa-p) quelpa-p)
(when (assq name quelpa-cache) (when (assq name quelpa-cache)
(map-delete quelpa-cache name) (setq quelpa-cache (map-delete quelpa-cache name))
(quelpa-save-cache) (quelpa-save-cache)
(setq quelpa-p t)) (setq quelpa-p t))
(package-delete (cadr (assq name package-alist)) force-p) (package-delete (cadr (assq name package-alist)) force-p)
(when (or (not (package-installed-p name)) (doom--delete-package-files name)
(package-built-in-p name)) (not (package-installed-p name))))
(let ((pkg-build-dir (expand-file-name (symbol-name name) quelpa-build-dir)))
(when (and quelpa-p (file-directory-p pkg-build-dir))
(delete-directory pkg-build-dir t)))
t)))
;; ;;
@ -378,11 +384,9 @@ calls."
(let ((name (package-desc-name desc))) (let ((name (package-desc-name desc)))
(when (and (not (package-installed-p name)) (when (and (not (package-installed-p name))
(assq name quelpa-cache)) (assq name quelpa-cache))
(map-delete quelpa-cache name) (setq quelpa-cache (map-delete quelpa-cache name))
(quelpa-save-cache) (quelpa-save-cache)
(let ((path (expand-file-name (symbol-name name) quelpa-build-dir))) (doom--delete-package-files name))))
(when (file-exists-p path)
(delete-directory path t))))))
;; ;;