Subject: Re: bug#59087: 29.0.50; package-vc-update error

From: Feng Shu <[email-masked]>
Date: Sat, 19 Nov 2022 12:59:54 +0800

Philip Kaludercic <[email-masked]> writes:

> Feng Shu <[email-masked]> writes:
>
>> Philip Kaludercic <[email-masked]> writes:
>>
>>> Feng Shu <[email-masked]> writes:
>>>
>>>> Philip Kaludercic <[email-masked]> writes:
>>>>
>>>>> Feng Shu <[email-masked]> writes:
>>>>>
>>>>>> I have found another issue:
>>>>>>
>>>>>> If I run package-update when emacs first start, it will show error:
>>>>>>
>>>>>> package-update: Symbol’s function definition is void: package-vc-update
>>>>>
>>>>
>>>> When I install another package, for example: cnfonts, package-update do
>>>> not show cnfonts, I need to reboot emacs.
>>>
>>> That is interesting, it the package listed in the Package List before
>>> restarting?
>>
>> I have installed cnfonts tar from melpa before, when I delete it,
>> package-update show cnfonts. 
>
> Ok, so it looks like the issue is in the following:
>
>   (seq-filter
>     (lambda (elt)
>       (or (let ((available
>                  (assq (car elt) package-archive-contents)))
>             (and available
>                  (version-list-<
>                   (package-desc-version (cadr elt))
>                   (package-desc-version (cadr available)))))
>           (package-vc-p (cadr (assq (car elt) package-alist)))))
>     package-alist)
>
>
> specifically the
>
> (package-vc-p (cadr (assq (car elt) package-alist)))
>
> We store all package descriptions in `package-alist', but here we only
> check the first one (which is also the one I believe that is activated).
>
> But after restarting Emacs, package.el makes sure that VC packages are
> prioritised, so that is why the check does work later on.
>
> The question is, what package is enabled?  I'd say that if after
> installation, you run M-x find-library and end up in the MELPA
> directory, then we would have to make up our mind of this is the right
> thing or not.
>
> But if the VC package is active, then we just have to make sure that it
> is inserted at the beginning of the list, and not at the end.
>

Maybe this issue is related package dependent, I have test like below:

1. before package-vc-install

(find-library-name "popon") => "/home/feng/.emacs.d/elpa-29/popon-0.12/popon.el"
(find-library-name "corfu-terminal") => "/home/feng/.emacs.d/elpa-29/corfu-terminal-0.5/corfu-terminal.el"

2. package-vc-install popon

(find-library-name "popon") => "/home/feng/.emacs.d/elpa-29/popon/popon.el"
(find-library-name "corfu-terminal") => "/home/feng/.emacs.d/elpa-29/corfu-terminal-0.5/corfu-terminal.el"

popon item is showed when run package-vc-update.

3. package-vc-install corfu-terminal

(find-library-name "popon") => "/home/feng/.emacs.d/elpa-29/popon/popon.el"
(find-library-name "corfu-terminal") => "/home/feng/.emacs.d/elpa-29/corfu-terminal/corfu-terminal.el"

package-vc-update only show corfu-terminal, and popon lost.
corfu-terminal is depend on popon.

--