diff options
| author | Artur Malabarba | 2015-05-23 10:13:02 +0100 |
|---|---|---|
| committer | Artur Malabarba | 2015-05-23 10:21:27 +0100 |
| commit | 7ac84a2570e1268cc040fcd529508307b2b22c01 (patch) | |
| tree | 79bbe53a991007036ce9bcf897a4ce1371f516ea | |
| parent | 1f83c3e52480d35b0970d5db95e565f31686d227 (diff) | |
| download | emacs-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.el | 22 |
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. | ||
| 2962 | ADD and REMOVE must be disjoint lists of package names (or | ||
| 2963 | `package-desc' objects) to be added and removed to the selected | ||
| 2964 | packages 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. |
| 2962 | Packages marked for installation are downloaded and installed; | 2977 | 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." | |||
| 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))) |