diff options
| author | Lars Ingebrigtsen | 2022-05-13 15:31:13 +0200 |
|---|---|---|
| committer | Lars Ingebrigtsen | 2022-05-13 15:31:13 +0200 |
| commit | 2ec9f025d242cf28098cf01c532d0cf4e6bd1661 (patch) | |
| tree | 696fde1a8325727d336dfaf5605a536262c61af7 | |
| parent | dce5642e86b0ed006a82146126578e6be76869dd (diff) | |
| download | emacs-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.el | 44 |
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. | ||
| 2185 | This 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. |
| 2185 | If the result looks like a dotted numeric version, return it. | 2193 | If 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. |
| 3577 | PACKAGES is a list of `package-desc' objects. | 3585 | PACKAGES is a list of `package-desc' objects. |
| 3578 | Formats the returned string to be usable in a minibuffer | 3586 | Formats the returned string to be usable in a minibuffer |
| 3579 | prompt (see `package-menu--prompt-transaction-p')." | 3587 | prompt (see `package-menu--prompt-transaction-p'). |
| 3588 | |||
| 3589 | If INCLUDE-DEPENDENCIES, also include the number of uninstalled | ||
| 3590 | dependencies." | ||
| 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 | ||