(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.
(package--used-elsewhere-p): New optional arg, ALL, and return
package-desc objects instead of names.
(package-delete): Update accordingly.
(describe-package-1): Describe which packages require the package.
An external package is any installed package that's not built-in
and not from `package-user-dir', which usually means it's from an
entry in `package-directory-list'. They are treated much like
built-in packages, in that they cannot be through the Package Menu
deleted and are not considered for upgrades.
(package-desc-status): Identify if a package is installed outside
`package-user-dir'.
(package-menu--print-info-simple)
(package-menu--status-predicate): Add support for it.
* etc/NEWS: Document it.
(package-import-keyring, package-refresh-contents)
(package-compute-transaction, package--save-selected-packages)
(package-install-from-archive, package-delete)
(package-menu--perform-transaction): Use `inhibit-message'
instead.
(package--compile): Set `warning-minimum-level' to :error.
(package--download-and-read-archives): Use pushnew instead of
append. If something terrible happened during a previous
download, simply refreshing should now make things work again.
(package-menu--refresh): Delegate obsolete-hiding to
`package--remove-hidden'.
(package--remove-hidden): Disregard high-priority package if it is
older than the installed one.
(package-menu-hide-low-priority): New variable, see its doc.
(package-archive-priorities): Update doc.
(package-desc-priority): New function.
(package-desc-priority-version): Use it.
(package--remove-hidden): New function.
(package-menu--refresh): Use it.
(package-menu--hide-obsolete): New variable.
(package--remove-hidden): Use it.
(package-menu-hide-obsolete): New interactive function to toggle
the variable.
(package--quick-help-keys): Document it.
(package-menu-async): Add :version tag.
(package-menu-mode-map): Bind package-menu-hide-obsolete.
(package-desc-status): Indicate non-installed obsolete packages as
avail-obso.
(package-menu-mark-install): Allow installation of avail-obso.
(package-menu--status-predicate): Sort avail-obso with available.
(package-menu-filter): Accept a list of keywords.
(package--all-keywords): New variable to cache known keywords.
(package-all-keywords): Populate it if necessary.
(package-refresh-contents): Reset it.
(package--has-keyword-p): Understand "arc:xxxx" and "status:xxxx"
as special keywords which match agains package archive and status
respectively.
* etc/NEWS: Document it.
* lisp/emacs-lisp/package.el (package--read-archive-file):
Set `coding-system-for-read' explicitly to 'utf-8 when reading the
downloaded and cached archive-contents files, so that non-ASCII
characters in package descriptions are displayed correctly in the
`list-packages' menu. (Bug#20231)
Co-authored-by: Steve Purcell <steve@sanityinc.com>
(package--silence): New variable.
(package--message): New function.
(package-import-keyring, package-refresh-contents)
(package-compute-transaction, package-install, package-delete)
(package-menu--perform-transaction, package-menu-execute): Use it.
(package--ensure-init-file): Check file contents before visiting.
(package-initialize): Call it.
(package-install-from-buffer, package-install): Don't call it.
(package-menu--list-to-prompt): New function.
(package-menu--prompt-transaction-p): Use "Upgrade" to make the
package-menu-execute prompt less verbose.
Most install/delete logic is now in
`package-menu--perform-transaction', and this function is called
asynchronously if `package-menu-async' is non-nil.