Function: package-upgrade
package-upgrade is an autoloaded, interactive and byte-compiled
function defined in package.el.gz.
Signature
(package-upgrade NAME)
Documentation
Upgrade package NAME if a newer version exists.
NAME should be a symbol.
Probably introduced at or before Emacs version 29.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/package.el.gz
;;;###autoload
(defun package-upgrade (name)
"Upgrade package NAME if a newer version exists.
NAME should be a symbol."
(interactive
(list (intern (completing-read
"Upgrade package: "
(package--upgradeable-packages t) nil t))))
(cl-check-type name symbol)
(let* ((pkg-desc (package-get-descriptor name 'installed))
(package-install-upgrade-built-in (not pkg-desc)))
;; `pkg-desc' will be nil when the package is an "active built-in".
(if (and pkg-desc (package-vc-p pkg-desc))
(error "Use `package-vc-upgrade' for VC packages")
(let ((new-desc (package-get-descriptor name 'archive)))
(when (or (null new-desc)
(and pkg-desc
(version-list-= (package-desc-version pkg-desc)
(package-desc-version new-desc))))
(user-error "Cannot upgrade `%s'" name))
(package-install new-desc
;; An active built-in has never been "selected"
;; before. Mark it as installed explicitly.
(and pkg-desc 'dont-select))
(when (and pkg-desc (not (package-matches-selector-p
package-retention-policy
pkg-desc)))
(package-delete pkg-desc 'force 'dont-unselect))))))