summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorArtur Malabarba <bruce.connor.am@gmail.com>2015-05-23 10:13:02 +0100
committerArtur Malabarba <bruce.connor.am@gmail.com>2015-05-23 10:21:27 +0100
commit7ac84a2570e1268cc040fcd529508307b2b22c01 (patch)
tree79bbe53a991007036ce9bcf897a4ce1371f516ea /lisp/emacs-lisp
parent1f83c3e52480d35b0970d5db95e565f31686d227 (diff)
downloademacs-7ac84a2570e1268cc040fcd529508307b2b22c01.tar.gz
emacs-7ac84a2570e1268cc040fcd529508307b2b22c01.tar.bz2
emacs-7ac84a2570e1268cc040fcd529508307b2b22c01.zip
* lisp/emacs-lisp/package.el: Always update selected-packages
(package--update-selected-packages): New function. (package-menu-execute): Use it before starting the transaction, this way the list of selected packages is updated even when the transaction fails. (package-menu--perform-transaction): Don't edit selected-packages.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/package.el22
1 files changed, 17 insertions, 5 deletions
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 7e09b1f4815..b96518df502 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2954,9 +2954,24 @@ objects removed."
(dolist (elt (package--sort-by-dependence delete-list))
(condition-case-unless-debug err
(let ((inhibit-message t))
- (package-delete elt))
+ (package-delete elt nil 'nosave))
(error (message (cadr err))))))))
+(defun package--update-selected-packages (add remove)
+ "Update the `package-selected-packages' list according to ADD and REMOVE.
+ADD and REMOVE must be disjoint lists of package names (or
+`package-desc' objects) to be added and removed to the selected
+packages list, respectively."
+ (dolist (p add)
+ (cl-pushnew (if (package-desc-p p) (package-desc-name p) p)
+ package-selected-packages))
+ (dolist (p remove)
+ (setq package-selected-packages
+ (remove (if (package-desc-p p) (package-desc-name p) p)
+ package-selected-packages)))
+ (when (or add remove)
+ (package--save-selected-packages package-selected-packages)))
+
(defun package-menu-execute (&optional noquery)
"Perform marked Package Menu actions.
Packages marked for installation are downloaded and installed;
@@ -2993,10 +3008,7 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm."
"]")))
(message (replace-regexp-in-string "__" "ing" message-template) "started")
;; Packages being upgraded are not marked as selected.
- (when .install
- (dolist (p .install)
- (cl-pushnew (package-desc-name p) package-selected-packages))
- (package--save-selected-packages package-selected-packages))
+ (package--update-selected-packages .install .delete)
(package-menu--perform-transaction install-list delete-list)
(when package-selected-packages
(if-let ((removable (package--removable-packages)))