bug#81112: 31.0.60; Package.el error when rejecting during review

Daniel Mendler via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <[email protected]> Fri, 31 Jul 2026 21:33:37 +0200
Newsgroups gmane.emacs.bugs
Message-ID <[email protected]>
Philip Kaludercic <[email protected]> writes:

> Philip Kaludercic <[email protected]> writes:
>
>> Sorry for the delay, this got buried in my inbox.
>>
>> Daniel Mendler <[email protected]> writes:
>>
>>> Philip Kaludercic <[email protected]> writes:
>>>
>>>> Daniel Mendler <[email protected]> writes:
>>>>
>>>>> When rejecting packages during package review, only the last rejected
>>>>> package is shown in the error. I would expect to see a list of the
>>>>> packages which have not been installed successfully. The error also does
>>>>> not look nice:
>>>>>
>>>>>   Rejected ‘dicom’, reverting transaction.
>>>>>   Error while upgrading: (error "Package ‘dicom’ not installed")
>>>>>
>>>>> Expected:
>>>>>
>>>>>   Not upgraded: dicom, elfeed
>>>>
>>>> The easy fix would be to adjust the error message to something like:
>>>>
>>>>   Error while upgrading: (error "Aborted transaction: dicom-X.Y, elfeed-M.N")
>>>
>>> To me the way this is printed looks a bit like an internal error. It
>>> should better look like this:
>>>
>>>   Error while upgrading: Aborted transaction: dicom-X.Y, elfeed-M.N
>>>
>>> But then, this is not actually an error, since the upgrades were
>>> rejected intentionally during review, so if you want to polish this, it
>>> could look like this:
>>>
>>>   Upgraded: foo-X.Y, bar-X.Y; Rejected: baz-X.Y
>>
>> If we don't need to look up the version numbers and the issue is /just/
>> with `package-upgrade-all', this part is easy:
>>
>> diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
>> index da4642aeb78..78465696e1c 100644
>> --- a/lisp/emacs-lisp/package.el
>> +++ b/lisp/emacs-lisp/package.el
>> @@ -2202,7 +2202,8 @@ package-upgrade-all
>>  `\\<package-menu-mode-map>\\[package-menu-mark-install]' after `\\[list-packages]'."
>>    (interactive (list (not noninteractive)))
>>    (package-refresh-contents)
>> -  (let ((upgradeable (package--upgradeable-packages package-install-upgrade-built-in)))
>> +  (let ((upgradeable (package--upgradeable-packages package-install-upgrade-built-in))
>> +        (upgraded '()))
>>      (if (not upgradeable)
>>          (message "No packages to upgrade")
>>        (when (and query
>> @@ -2214,7 +2215,15 @@ package-upgrade-all
>>          (user-error "Upgrade aborted"))
>>        (dolist (pkg upgradeable)
>>          (with-demoted-errors "Error while upgrading: %S"
>> -          (package-upgrade pkg))))))
>> +          (package-upgrade pkg)
>> +          (push pkg upgraded)))
>> +      (let ((rejected (cl-set-difference upgradable upgraded)))
>> +        (message
>> +         "Upgraded: %s%s"
>> +         (mapconcat #'symbol-name upgraded ", ")
>> +         (if rejected
>> +             (concat "; Rejected: " (mapconcat #'symbol-name rejected ", "))
>> +           ""))))))
>>  
>>  (defun package--dependencies (pkg)
>>    "Return a list of all transitive dependencies of PKG.
>>
>>
>> Note that this doesn't include dependencies!
>>
>> The other message would still get logged, but the last message the user
>> sees is this confirmation.
>
> Ping?  Do you think that this is an acceptable fix for now?

Sounds good!

>>>>> Thanks!