aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Malabarba2015-05-23 10:13:02 +0100
committerArtur Malabarba2015-05-23 10:21:27 +0100
commit7ac84a2570e1268cc040fcd529508307b2b22c01 (patch)
tree79bbe53a991007036ce9bcf897a4ce1371f516ea
parent1f83c3e52480d35b0970d5db95e565f31686d227 (diff)
downloademacs-7ac84a2570e1268cc040fcd529508307b2b22c01.tar.gz
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.
-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."
2954 (dolist (elt (package--sort-by-dependence delete-list)) 2954 (dolist (elt (package--sort-by-dependence delete-list))
2955 (condition-case-unless-debug err 2955 (condition-case-unless-debug err
2956 (let ((inhibit-message t)) 2956 (let ((inhibit-message t))
2957 (package-delete elt)) 2957 (package-delete elt nil 'nosave))
2958 (error (message (cadr err)))))))) 2958 (error (message (cadr err))))))))
2959 2959
2960(defun package--update-selected-packages (add remove)
2961 "Update the `package-selected-packages' list according to ADD and REMOVE.
2962ADD and REMOVE must be disjoint lists of package names (or
2963`package-desc' objects) to be added and removed to the selected
2964packages list, respectively."
2965 (dolist (p add)
2966 (cl-pushnew (if (package-desc-p p) (package-desc-name p) p)
2967 package-selected-packages))
2968 (dolist (p remove)
2969 (setq package-selected-packages
2970 (remove (if (package-desc-p p) (package-desc-name p) p)
2971 package-selected-packages)))
2972 (when (or add remove)
2973 (package--save-selected-packages package-selected-packages)))
2974
2960(defun package-menu-execute (&optional noquery) 2975(defun package-menu-execute (&optional noquery)
2961 "Perform marked Package Menu actions. 2976 "Perform marked Package Menu actions.
2962Packages marked for installation are downloaded and installed; 2977Packages marked for installation are downloaded and installed;
@@ -2993,10 +3008,7 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm."
2993 "]"))) 3008 "]")))
2994 (message (replace-regexp-in-string "__" "ing" message-template) "started") 3009 (message (replace-regexp-in-string "__" "ing" message-template) "started")
2995 ;; Packages being upgraded are not marked as selected. 3010 ;; Packages being upgraded are not marked as selected.
2996 (when .install 3011 (package--update-selected-packages .install .delete)
2997 (dolist (p .install)
2998 (cl-pushnew (package-desc-name p) package-selected-packages))
2999 (package--save-selected-packages package-selected-packages))
3000 (package-menu--perform-transaction install-list delete-list) 3012 (package-menu--perform-transaction install-list delete-list)
3001 (when package-selected-packages 3013 (when package-selected-packages
3002 (if-let ((removable (package--removable-packages))) 3014 (if-let ((removable (package--removable-packages)))