aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Ingebrigtsen2022-05-13 15:31:13 +0200
committerLars Ingebrigtsen2022-05-13 15:31:13 +0200
commit2ec9f025d242cf28098cf01c532d0cf4e6bd1661 (patch)
tree696fde1a8325727d336dfaf5605a536262c61af7
parentdce5642e86b0ed006a82146126578e6be76869dd (diff)
downloademacs-2ec9f025d242cf28098cf01c532d0cf4e6bd1661.tar.gz
emacs-2ec9f025d242cf28098cf01c532d0cf4e6bd1661.zip
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.
-rw-r--r--lisp/emacs-lisp/package.el44
1 files changed, 36 insertions, 8 deletions
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 6c77f6f150c..7f72caba65d 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2180,6 +2180,14 @@ to install it but still mark it as selected."
2180 (user-error "Updating aborted")) 2180 (user-error "Updating aborted"))
2181 (mapc #'package-update updateable)))) 2181 (mapc #'package-update updateable))))
2182 2182
2183(defun package--dependencies (pkg)
2184 "Return a list of all dependencies PKG has.
2185This is done recursively."
2186 ;; Can we have circular dependencies? Assume "nope".
2187 (when-let* ((desc (cadr (assq pkg package-archive-contents)))
2188 (deps (mapcar #'car (package-desc-reqs desc))))
2189 (delete-dups (apply #'nconc deps (mapcar #'package--dependencies deps)))))
2190
2183(defun package-strip-rcs-id (str) 2191(defun package-strip-rcs-id (str)
2184 "Strip RCS version ID from the version string STR. 2192 "Strip RCS version ID from the version string STR.
2185If the result looks like a dotted numeric version, return it. 2193If the result looks like a dotted numeric version, return it.
@@ -3572,17 +3580,34 @@ immediately."
3572 (setq package-menu--mark-upgrades-pending t) 3580 (setq package-menu--mark-upgrades-pending t)
3573 (message "Waiting for refresh to finish..."))) 3581 (message "Waiting for refresh to finish...")))
3574 3582
3575(defun package-menu--list-to-prompt (packages) 3583(defun package-menu--list-to-prompt (packages &optional include-dependencies)
3576 "Return a string listing PACKAGES that's usable in a prompt. 3584 "Return a string listing PACKAGES that's usable in a prompt.
3577PACKAGES is a list of `package-desc' objects. 3585PACKAGES is a list of `package-desc' objects.
3578Formats the returned string to be usable in a minibuffer 3586Formats the returned string to be usable in a minibuffer
3579prompt (see `package-menu--prompt-transaction-p')." 3587prompt (see `package-menu--prompt-transaction-p').
3588
3589If INCLUDE-DEPENDENCIES, also include the number of uninstalled
3590dependencies."
3580 ;; The case where `package' is empty is handled in 3591 ;; The case where `package' is empty is handled in
3581 ;; `package-menu--prompt-transaction-p' below. 3592 ;; `package-menu--prompt-transaction-p' below.
3582 (format "%d (%s)" 3593 (format "%d (%s)%s"
3583 (length packages) 3594 (length packages)
3584 (mapconcat #'package-desc-full-name packages " "))) 3595 (mapconcat #'package-desc-full-name packages " ")
3585 3596 (let ((deps
3597 (seq-remove
3598 #'package-installed-p
3599 (delete-dups
3600 (apply
3601 #'nconc
3602 (mapcar (lambda (package)
3603 (package--dependencies
3604 (package-desc-name package)))
3605 packages))))))
3606 (if (and include-dependencies deps)
3607 (if (length= deps 1)
3608 (format " plus 1 dependency")
3609 (format " plus %d dependencies" (length deps)))
3610 ""))))
3586 3611
3587(defun package-menu--prompt-transaction-p (delete install upgrade) 3612(defun package-menu--prompt-transaction-p (delete install upgrade)
3588 "Prompt the user about DELETE, INSTALL, and UPGRADE. 3613 "Prompt the user about DELETE, INSTALL, and UPGRADE.
@@ -3591,11 +3616,14 @@ Either may be nil, but not all."
3591 (y-or-n-p 3616 (y-or-n-p
3592 (concat 3617 (concat
3593 (when delete 3618 (when delete
3594 (format "Packages to delete: %s. " (package-menu--list-to-prompt delete))) 3619 (format "Packages to delete: %s. "
3620 (package-menu--list-to-prompt delete)))
3595 (when install 3621 (when install
3596 (format "Packages to install: %s. " (package-menu--list-to-prompt install))) 3622 (format "Packages to install: %s. "
3623 (package-menu--list-to-prompt install t)))
3597 (when upgrade 3624 (when upgrade
3598 (format "Packages to upgrade: %s. " (package-menu--list-to-prompt upgrade))) 3625 (format "Packages to upgrade: %s. "
3626 (package-menu--list-to-prompt upgrade)))
3599 "Proceed? "))) 3627 "Proceed? ")))
3600 3628
3601 3629