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.

View in manual

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))))))