* lisp/emacs-lisp/package.el: Better transaction messages
(package-menu--partition-transaction): New function. (package-menu--prompt-transaction-p, package-menu-execute): Use it. (package-menu--perform-transaction): Don't do any messaging.
This commit is contained in:
parent
0060c0d7b1
commit
35514815fa
1 changed files with 50 additions and 29 deletions
|
@ -2895,25 +2895,36 @@ prompt (see `package-menu--prompt-transaction-p')."
|
||||||
(t (format "package `%s'"
|
(t (format "package `%s'"
|
||||||
(package-desc-full-name (car packages))))))
|
(package-desc-full-name (car packages))))))
|
||||||
|
|
||||||
(defun package-menu--prompt-transaction-p (install delete)
|
(defun package-menu--prompt-transaction-p (delete install upgrade)
|
||||||
"Prompt the user about installing INSTALL and deleting DELETE.
|
"Prompt the user about DELETE, INSTALL, and UPGRADE.
|
||||||
INSTALL and DELETE are lists of `package-desc'. Either may be
|
DELETE, INSTALL, and UPGRADE are lists of `package-desc' objects.
|
||||||
nil, but not both."
|
Either may be nil, but not all."
|
||||||
|
(y-or-n-p
|
||||||
|
(concat
|
||||||
|
(when delete "Delete ")
|
||||||
|
(package-menu--list-to-prompt delete)
|
||||||
|
(when (and delete install)
|
||||||
|
(if upgrade "; " "; and "))
|
||||||
|
(when install "Install ")
|
||||||
|
(package-menu--list-to-prompt install)
|
||||||
|
(when (and upgrade (or install delete)) "; and ")
|
||||||
|
(when upgrade "Upgrade ")
|
||||||
|
(package-menu--list-to-prompt upgrade)
|
||||||
|
"? ")))
|
||||||
|
|
||||||
|
(defun package-menu--partition-transaction (install delete)
|
||||||
|
"Return an alist describing an INSTALL DELETE transaction.
|
||||||
|
Alist contains three entries, upgrade, delete, and install, each
|
||||||
|
with a list of package names.
|
||||||
|
|
||||||
|
The upgrade entry contains any `package-desc' objects in INSTALL
|
||||||
|
whose name coincides with an object in DELETE. The delete and
|
||||||
|
the install entries are the same as DELETE and INSTALL with such
|
||||||
|
objects removed."
|
||||||
(let* ((upg (cl-intersection install delete :key #'package-desc-name))
|
(let* ((upg (cl-intersection install delete :key #'package-desc-name))
|
||||||
(ins (cl-set-difference install upg :key #'package-desc-name))
|
(ins (cl-set-difference install upg :key #'package-desc-name))
|
||||||
(del (cl-set-difference delete upg :key #'package-desc-name)))
|
(del (cl-set-difference delete upg :key #'package-desc-name)))
|
||||||
(y-or-n-p
|
`((delete . ,del) (install . ,ins) (upgrade . ,upg))))
|
||||||
(concat
|
|
||||||
(when del "Delete ")
|
|
||||||
(package-menu--list-to-prompt del)
|
|
||||||
(when (and del ins)
|
|
||||||
(if upg "; " "; and "))
|
|
||||||
(when ins "Install ")
|
|
||||||
(package-menu--list-to-prompt ins)
|
|
||||||
(when (and upg (or ins del)) "; and ")
|
|
||||||
(when upg "Upgrade ")
|
|
||||||
(package-menu--list-to-prompt upg)
|
|
||||||
"? "))))
|
|
||||||
|
|
||||||
(defun package-menu--perform-transaction (install-list delete-list)
|
(defun package-menu--perform-transaction (install-list delete-list)
|
||||||
"Install packages in INSTALL-LIST and delete DELETE-LIST."
|
"Install packages in INSTALL-LIST and delete DELETE-LIST."
|
||||||
|
@ -2931,14 +2942,7 @@ nil, but not both."
|
||||||
(condition-case-unless-debug err
|
(condition-case-unless-debug err
|
||||||
(let ((inhibit-message t))
|
(let ((inhibit-message t))
|
||||||
(package-delete elt))
|
(package-delete elt))
|
||||||
(error (message (cadr err)))))
|
(error (message (cadr err)))))))
|
||||||
(message "Transaction done")
|
|
||||||
(when package-selected-packages
|
|
||||||
(when-let ((removable (package--removable-packages)))
|
|
||||||
(message "These %d packages are no longer needed, type `M-x package-autoremove' to remove them (%s)"
|
|
||||||
(length removable)
|
|
||||||
(mapconcat #'symbol-name removable ", "))))
|
|
||||||
(package-menu--post-refresh)))
|
|
||||||
|
|
||||||
(defun package-menu-execute (&optional noquery)
|
(defun package-menu-execute (&optional noquery)
|
||||||
"Perform marked Package Menu actions.
|
"Perform marked Package Menu actions.
|
||||||
|
@ -2963,11 +2967,28 @@ Optional argument NOQUERY non-nil means do not ask the user to confirm."
|
||||||
(forward-line)))
|
(forward-line)))
|
||||||
(unless (or delete-list install-list)
|
(unless (or delete-list install-list)
|
||||||
(user-error "No operations specified"))
|
(user-error "No operations specified"))
|
||||||
(when (or noquery
|
(let-alist (package-menu--partition-transaction install-list delete-list)
|
||||||
(package-menu--prompt-transaction-p install-list delete-list))
|
(when (or noquery
|
||||||
(message "Transaction started")
|
(package-menu--prompt-transaction-p .delete .install .upgrade))
|
||||||
;; This calls `package-menu--generate' after everything's done.
|
(let ((message-template
|
||||||
(package-menu--perform-transaction install-list delete-list))))
|
(concat "Package menu: Operation %s ["
|
||||||
|
(when .delete (format "Delet__ %s" (length .delete)))
|
||||||
|
(when (and .delete .install) "; ")
|
||||||
|
(when .install (format "Install__ %s" (length .install)))
|
||||||
|
(when (and .upgrade (or .install .delete)) "; ")
|
||||||
|
(when .upgrade (format "Upgrad__ %s" (length .upgrade)))
|
||||||
|
"]")))
|
||||||
|
(message (replace-regexp-in-string "__" "ing" message-template) "started")
|
||||||
|
(package-menu--perform-transaction install-list delete-list)
|
||||||
|
(when package-selected-packages
|
||||||
|
(if-let ((removable (package--removable-packages)))
|
||||||
|
(message "Package menu: Operation finished. %d packages %s"
|
||||||
|
(length removable)
|
||||||
|
"are no longer needed, type `M-x package-autoremove' to remove them")
|
||||||
|
(message (replace-regexp-in-string "__" "ed" message-template)
|
||||||
|
"finished"))))
|
||||||
|
;; This calls `package-menu--generate'.
|
||||||
|
(package-menu--post-refresh)))))
|
||||||
|
|
||||||
(defun package-menu--version-predicate (A B)
|
(defun package-menu--version-predicate (A B)
|
||||||
(let ((vA (or (aref (cadr A) 1) '(0)))
|
(let ((vA (or (aref (cadr A) 1) '(0)))
|
||||||
|
|
Loading…
Add table
Reference in a new issue