Subject: bug#73102: 29.4; `package-recompile-all' should skip packages installed by distro package manager

From: Philip Kaludercic <[email-masked]>
Date: Sun, 08 Sep 2024 10:42:35 +0000

Zhengyi Fu <[email-masked]> writes:

> When I try recompiling all packages installed by package.el with `M-x
> package-recompile-all', I got the following error:
>
> Debugger entered--Lisp error: (permission-denied "Removing old name" "Permission denied" "/usr/share/emacs/site-lisp/elpa/mu4e-1.10.8/mu4e-a...")
>   package-recompile(#s(package-desc :name mu4e :version (1 10 8) :summary "the mu mail user agent" :reqs nil :kind nil :archive nil :dir "/usr/share/emacs/site-lisp/elpa/mu4e-1.10.8" :extras nil :signed nil))
>   package-recompile-all()
>   funcall-interactively(package-recompile-all)
>   command-execute(package-recompile-all record)
>   execute-extended-command(nil "package-recompile-all" "recom all")
>   funcall-interactively(execute-extended-command nil "package-recompile-all" "recom all")
>   command-execute(execute-extended-command)
>
> This is possibly because the package `mu4e' was installed by the distro
> package manager in a path where normal users don't have write access.
>
> I think `package-recompile-all' should either skip those packages that
> are not installed by package.el or ignore such errors and continue to
> recompile other packages.

We have installed a patch in Bug#68678 on master (the commit is from
last February, so you wouldn't see it yet on 29.4) that wraps the
`package-recompile' call in a `with-demoted-errors' block.  That would
still emit a error message, but it wouldn't break the recompilation
procedure.  Do you think that is enough, or should be explicitly and
additionally avoid re-compiling external packages?

-- 
	Philip Kaludercic on icterid