From ec6c7de2395a9613c173b912f0b4895cd17f3caf Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 8 Jan 2014 09:19:27 -0500 Subject: [PATCH] * lisp/emacs-lisp/package.el (package-delete): Only remove pkg-desc from package-alist. --- lisp/ChangeLog | 5 +++++ lisp/emacs-lisp/package.el | 41 +++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a39294ac54..ba6861cc27 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2014-01-08 Stefan Monnier + + * emacs-lisp/package.el (package-delete): Only remove pkg-desc from + package-alist. + 2014-01-08 Bastien Guerry * emacs-lisp/package.el (package-installed-p): First check if the diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index a89bf40eb4..26f9c35b3e 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -818,28 +818,26 @@ It will move point to somewhere in the headers." (defun package--check-signature (location file) "Check signature of the current buffer. GnuPG keyring is located under \"gnupg\" in `package-user-dir'." - (let ((context (epg-make-context 'OpenPGP)) - (homedir (expand-file-name "gnupg" package-user-dir)) - (sig-file (concat file ".sig")) - sig-content - good-signatures) - (setq sig-content (package--with-work-buffer location sig-file - (buffer-string))) + (let* ((context (epg-make-context 'OpenPGP)) + (homedir (expand-file-name "gnupg" package-user-dir)) + (sig-file (concat file ".sig")) + (sig-content (package--with-work-buffer location sig-file + (buffer-string)))) (epg-context-set-home-directory context homedir) (epg-verify-string context sig-content (buffer-string)) ;; The .sig file may contain multiple signatures. Success if one ;; of the signatures is good. - (setq good-signatures - (delq nil (mapcar (lambda (sig) - (if (eq (epg-signature-status sig) 'good) - sig)) - (epg-context-result-for context 'verify)))) - (if (null good-signatures) - (error "Failed to verify signature %s: %S" - sig-file - (mapcar #'epg-signature-to-string - (epg-context-result-for context 'verify))) - good-signatures))) + (let ((good-signatures + (delq nil (mapcar (lambda (sig) + (if (eq (epg-signature-status sig) 'good) + sig)) + (epg-context-result-for context 'verify))))) + (if (null good-signatures) + (error "Failed to verify signature %s: %S" + sig-file + (mapcar #'epg-signature-to-string + (epg-context-result-for context 'verify))) + good-signatures)))) (defun package-install-from-archive (pkg-desc) "Download and install a tar package." @@ -1232,8 +1230,11 @@ The file can either be a tar file or an Emacs Lisp file." (if (file-exists-p signed-file) (delete-file signed-file))) ;; Update package-alist. - (let* ((name (package-desc-name pkg-desc))) - (setq package-alist (delete (assq name package-alist) package-alist))) + (let* ((name (package-desc-name pkg-desc)) + (pkgs (assq name package-alist))) + (delete pkg-desc pkgs) + (unless (cdr pkgs) + (setq package-alist (delq pkgs package-alist)))) (message "Package `%s' deleted." (package-desc-full-name pkg-desc))))) (defun package-archive-base (desc) -- 2.20.1