diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index fda855d2143..562dc5dbca3 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -2173,7 +2173,8 @@ package-installed-p (version-list-<= min-version (package-desc-version (car pkg-descs))))) ;; Also check built-in packages. - (package-built-in-p package min-version))))) + (and (not (package-install-upgrade-built-in-p package)) + (package-built-in-p package min-version)))))) (defun package-download-transaction (packages) "Download and install all the packages in PACKAGES. @@ -2197,6 +2198,11 @@ package-install-upgrade-built-in :type 'boolean :version "29.1") +(defun package-install-upgrade-built-in-p (pkg) + "Return non-nil if PKG should be upgraded." + (or (assq pkg package-pinned-packages) + package-install-upgrade-built-in)) + ;;;###autoload (defun package-install (pkg &optional dont-select) "Install the package PKG. @@ -2226,7 +2232,7 @@ package-install (mapcan (lambda (elt) (and (or (and (or current-prefix-arg - package-install-upgrade-built-in) + (package-install-upgrade-built-in-p elt)) (package--active-built-in-p (car elt))) (not (package-installed-p (car elt)))) (list (symbol-name (car elt))))) @@ -2241,7 +2247,7 @@ package-install (unless (or dont-select (package--user-selected-p name)) (package--save-selected-packages (cons name package-selected-packages))) - (when (and (or current-prefix-arg package-install-upgrade-built-in) + (when (and (or current-prefix-arg (package-install-upgrade-built-in-p name)) (package--active-built-in-p pkg)) (setq pkg (or (cadr (assq name package-archive-contents)) pkg))) (if-let* ((transaction