diff options
| author | Dmitry Gutov | 2023-05-06 03:54:59 +0300 |
|---|---|---|
| committer | Dmitry Gutov | 2023-05-06 03:58:49 +0300 |
| commit | 53cc61d60dbfe94e5bf47cf167f816837540d2b3 (patch) | |
| tree | 67ade04396372804fea90097f3652bfab6e9fb87 /lisp | |
| parent | 0c6311386a12560c6578ffe50996c1f2c841ddfe (diff) | |
| download | emacs-53cc61d60dbfe94e5bf47cf167f816837540d2b3.tar.gz emacs-53cc61d60dbfe94e5bf47cf167f816837540d2b3.zip | |
package-upgrade: Implement the upgrading of built-ins
* lisp/emacs-lisp/package.el (package--upgradeable-packages):
Add new argument. When INCLUDE-BUILTINS is non-nil, also search
among package--builtins (bug#62720).
(package-upgrade): Use the new argument. Bind
package-install-upgrade-built-in when necessary. Mark the package
as selected if it was previously an "active built-in".
(package-upgrade-all): Update the docstring.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/emacs-lisp/package.el | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 0cd54c3fbe2..2892728ebd9 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el | |||
| @@ -2263,25 +2263,26 @@ had been enabled." | |||
| 2263 | 2263 | ||
| 2264 | ;;;###autoload | 2264 | ;;;###autoload |
| 2265 | (defun package-upgrade (name) | 2265 | (defun package-upgrade (name) |
| 2266 | "Upgrade package NAME if a newer version exists. | 2266 | "Upgrade package NAME if a newer version exists." |
| 2267 | |||
| 2268 | Currently, packages which are part of the Emacs distribution | ||
| 2269 | cannot be upgraded that way. To enable upgrades of such a | ||
| 2270 | package using this command, first upgrade the package to a | ||
| 2271 | newer version from ELPA by using `\\<package-menu-mode-map>\\[package-menu-mark-install]' after `\\[list-packages]'." | ||
| 2272 | (interactive | 2267 | (interactive |
| 2273 | (list (completing-read | 2268 | (list (completing-read |
| 2274 | "Upgrade package: " (package--upgradeable-packages) nil t))) | 2269 | "Upgrade package: " (package--upgradeable-packages t) nil t))) |
| 2275 | (let* ((package (if (symbolp name) | 2270 | (let* ((package (if (symbolp name) |
| 2276 | name | 2271 | name |
| 2277 | (intern name))) | 2272 | (intern name))) |
| 2278 | (pkg-desc (cadr (assq package package-alist)))) | 2273 | (pkg-desc (cadr (assq package package-alist))) |
| 2279 | (if (package-vc-p pkg-desc) | 2274 | (package-install-upgrade-built-in (not pkg-desc))) |
| 2275 | ;; `pkg-desc' will be nil when the package is an "active built-in". | ||
| 2276 | (if (and pkg-desc (package-vc-p pkg-desc)) | ||
| 2280 | (package-vc-upgrade pkg-desc) | 2277 | (package-vc-upgrade pkg-desc) |
| 2281 | (package-delete pkg-desc 'force 'dont-unselect) | 2278 | (when pkg-desc |
| 2282 | (package-install package 'dont-select)))) | 2279 | (package-delete pkg-desc 'force 'dont-unselect)) |
| 2283 | 2280 | (package-install package | |
| 2284 | (defun package--upgradeable-packages () | 2281 | ;; An active built-in has never been "selected" |
| 2282 | ;; before. Mark it as installed explicitly. | ||
| 2283 | (and pkg-desc 'dont-select))))) | ||
| 2284 | |||
| 2285 | (defun package--upgradeable-packages (&optional include-builtins) | ||
| 2285 | ;; Initialize the package system to get the list of package | 2286 | ;; Initialize the package system to get the list of package |
| 2286 | ;; symbols for completion. | 2287 | ;; symbols for completion. |
| 2287 | (package--archives-initialize) | 2288 | (package--archives-initialize) |
| @@ -2292,11 +2293,21 @@ newer version from ELPA by using `\\<package-menu-mode-map>\\[package-menu-mark- | |||
| 2292 | (or (let ((available | 2293 | (or (let ((available |
| 2293 | (assq (car elt) package-archive-contents))) | 2294 | (assq (car elt) package-archive-contents))) |
| 2294 | (and available | 2295 | (and available |
| 2295 | (version-list-< | 2296 | (or (and |
| 2296 | (package-desc-version (cadr elt)) | 2297 | include-builtins |
| 2297 | (package-desc-version (cadr available))))) | 2298 | (not (package-desc-version (cadr elt)))) |
| 2298 | (package-vc-p (cadr (assq (car elt) package-alist))))) | 2299 | (version-list-< |
| 2299 | package-alist))) | 2300 | (package-desc-version (cadr elt)) |
| 2301 | (package-desc-version (cadr available)))))) | ||
| 2302 | (package-vc-p (cadr elt)))) | ||
| 2303 | (if include-builtins | ||
| 2304 | (append package-alist | ||
| 2305 | (mapcan | ||
| 2306 | (lambda (elt) | ||
| 2307 | (when (not (assq (car elt) package-alist)) | ||
| 2308 | (list (list (car elt) (package--from-builtin elt))))) | ||
| 2309 | package--builtins)) | ||
| 2310 | package-alist)))) | ||
| 2300 | 2311 | ||
| 2301 | ;;;###autoload | 2312 | ;;;###autoload |
| 2302 | (defun package-upgrade-all (&optional query) | 2313 | (defun package-upgrade-all (&optional query) |
| @@ -2306,8 +2317,9 @@ interactively, QUERY is always true. | |||
| 2306 | 2317 | ||
| 2307 | Currently, packages which are part of the Emacs distribution are | 2318 | Currently, packages which are part of the Emacs distribution are |
| 2308 | not upgraded by this command. To enable upgrading such a package | 2319 | not upgraded by this command. To enable upgrading such a package |
| 2309 | using this command, first upgrade the package to a newer version | 2320 | using this command, first upgrade the package to a newer version |
| 2310 | from ELPA by using `\\<package-menu-mode-map>\\[package-menu-mark-install]' after `\\[list-packages]'." | 2321 | from ELPA by either using `\\[package-upgrade]' or |
| 2322 | `\\<package-menu-mode-map>\\[package-menu-mark-install]' after `\\[list-packages]'." | ||
| 2311 | (interactive (list (not noninteractive))) | 2323 | (interactive (list (not noninteractive))) |
| 2312 | (package-refresh-contents) | 2324 | (package-refresh-contents) |
| 2313 | (let ((upgradeable (package--upgradeable-packages))) | 2325 | (let ((upgradeable (package--upgradeable-packages))) |