Subject: Re: bug#62720: 29.0.60; Not easy at all to upgrade :core packages like Eglot

From: Philip Kaludercic <[email-masked]>
Date: Sat, 15 Apr 2023 10:40:04 +0000

João Távora <[email-masked]> writes:

> Philip Kaludercic <[email-masked]> writes:
>
>> João Távora <[email-masked]> writes:
>>>> Philip presented such a safe modification, and we are in the final
>>>> stages of discussing its details, before it will be installed.  So
>>>> yes, it is possible.
>>
>> I might have missed a message, what was the last state here?
>
> Eli is talking about an interaction between you two, so you should be
> able to figure out.

I know, I have just lost track.

[...]

> Eli said something like this patch could be acceptable for master and
> maybe 29.2.  
>
> ----------8<----------8<----------8<----------8<----------8<----------8<
> --- a/lisp/emacs-lisp/package.el
> +++ b/lisp/emacs-lisp/package.el
> @@ -652,6 +652,9 @@ package--builtins
>  name (a symbol) and DESC is a `package--bi-desc' structure.")
>  (put 'package--builtins 'risky-local-variable t)
>  
> +(defvar package--safely-upgradeable-builtins '(eglot use-package)
> +  "See bug#62720 for longest docstring ever.")
> +
>  (defvar package-alist nil
>    "Alist of all packages available for activation.
>  Each element has the form (PKG . DESCS), where PKG is a package
> @@ -2201,14 +2204,19 @@ package-install
>       (package--archives-initialize)
>       (list (intern (completing-read
>                      "Install package: "
> +                    (append
>                       (delq nil
>                             (mapcar (lambda (elt)
>                                       (unless (package-installed-p (car elt))
>                                         (symbol-name (car elt))))
>                                     package-archive-contents))
> +                     package--safely-upgradeable-builtins)
>                      nil t))
>             nil)))
>    (package--archives-initialize)
> +  (when-let ((desc (and (memq pkg package--safely-upgradeable-builtins)
> +                        (cadr (assoc pkg package-archive-contents)))))
> +    (setq pkg desc))
>    (add-hook 'post-command-hook #'package-menu--post-refresh)
>    (let ((name (if (package-desc-p pkg)
>                    (package-desc-name pkg)
> ---------->8---------->8---------->8---------->8---------->8---------->8
>
> 1. Node code complexity.  It's 6 lines of trivial code.
> 2. Absolutely no risk of "silent installation of software that wasn't ever
>    installed before"
> 3. Fixes all the aforementioned issues

Personally I think this would be a fine solution considering the
constraints.

-- 
Philip Kaludercic