Include the number of dependencies in the install prompt

* lisp/emacs-lisp/package.el (package-menu--list-to-prompt): Add
the info to the prompt (bug#23346).
(package--dependencies): New function.
This commit is contained in:
Lars Ingebrigtsen 2022-05-13 15:31:13 +02:00
parent dce5642e86
commit 2ec9f025d2

View file

@ -2180,6 +2180,14 @@ to install it but still mark it as selected."
(user-error "Updating aborted"))
(mapc #'package-update updateable))))
(defun package--dependencies (pkg)
"Return a list of all dependencies PKG has.
This is done recursively."
;; Can we have circular dependencies? Assume "nope".
(when-let* ((desc (cadr (assq pkg package-archive-contents)))
(deps (mapcar #'car (package-desc-reqs desc))))
(delete-dups (apply #'nconc deps (mapcar #'package--dependencies deps)))))
(defun package-strip-rcs-id (str)
"Strip RCS version ID from the version string STR.
If the result looks like a dotted numeric version, return it.
@ -3572,17 +3580,34 @@ immediately."
(setq package-menu--mark-upgrades-pending t)
(message "Waiting for refresh to finish...")))
(defun package-menu--list-to-prompt (packages)
(defun package-menu--list-to-prompt (packages &optional include-dependencies)
"Return a string listing PACKAGES that's usable in a prompt.
PACKAGES is a list of `package-desc' objects.
Formats the returned string to be usable in a minibuffer
prompt (see `package-menu--prompt-transaction-p')."
prompt (see `package-menu--prompt-transaction-p').
If INCLUDE-DEPENDENCIES, also include the number of uninstalled
dependencies."
;; The case where `package' is empty is handled in
;; `package-menu--prompt-transaction-p' below.
(format "%d (%s)"
(format "%d (%s)%s"
(length packages)
(mapconcat #'package-desc-full-name packages " ")))
(mapconcat #'package-desc-full-name packages " ")
(let ((deps
(seq-remove
#'package-installed-p
(delete-dups
(apply
#'nconc
(mapcar (lambda (package)
(package--dependencies
(package-desc-name package)))
packages))))))
(if (and include-dependencies deps)
(if (length= deps 1)
(format " plus 1 dependency")
(format " plus %d dependencies" (length deps)))
""))))
(defun package-menu--prompt-transaction-p (delete install upgrade)
"Prompt the user about DELETE, INSTALL, and UPGRADE.
@ -3591,11 +3616,14 @@ Either may be nil, but not all."
(y-or-n-p
(concat
(when delete
(format "Packages to delete: %s. " (package-menu--list-to-prompt delete)))
(format "Packages to delete: %s. "
(package-menu--list-to-prompt delete)))
(when install
(format "Packages to install: %s. " (package-menu--list-to-prompt install)))
(format "Packages to install: %s. "
(package-menu--list-to-prompt install t)))
(when upgrade
(format "Packages to upgrade: %s. " (package-menu--list-to-prompt upgrade)))
(format "Packages to upgrade: %s. "
(package-menu--list-to-prompt upgrade)))
"Proceed? ")))