On Mon, 24 Jul 2023, 11:35 David Bremner, <[email protected]> wrote:
> Richard Lewis <[email protected]> writes:
> > On Sun, 23 Jul 2023, 12:34 David Bremner, <[email protected]> wrote:
> >
>
> As far as the actual bug with failing to clean up, I ran
>
> % systemd-nspawn --machine bullseye /usr/lib/dh-elpa/helper/remove emacs
> dash 2.17.0
>
> and that cleans up the directory
>
> /usr/share/emacs/site-lisp/elpa/dash-2.17.0
>
> so the bug is at some other level of the stack. I guess I will have to
> look at the log from the upgrade, but I haven't had a chance to do that
> yet.
>
I was trying to understand when (and how ) your command above was intended
to be run as part of the upgrade. I cna see that in bullseye
/usr/lib/emacsen-common/packages/remove/elpa-dash would do it if called
with 'emacs'. but this is never called:
What happens in the 'apt upgrade' is:
the old emacsen-common prerm is called ('<old prerm> upgrade
<new-version>'):
/var/lib/dpkg/info/emacsen-common.prerm upgrade 3.0.5
This calls:
/usr/lib/emacsen-common/emacs-package-remove --prerm emacsen-common
This calls:
/usr/lib/emacsen-common/packages/remove/emacsen-common
and at the end it _unlinks_:
/var/lib/emacsen-common/state/package/installed/emacsen-common
Then, apt prepares to unpack elpa-dash:
The elpa-dash prerm (from bullseye) is called as:
/var/lib/dpkg/info/elpa-dash.prerm upgrade
2.19.1+git20220608.1.0ac1ecf+dfsg-1)
but this starts with:
if [ -e /var/lib/emacsen-common/state/package/installed/emacsen-common -a
-x
/usr/lib/emacsen-common/emacs-package-remove ] ; then
/usr/lib/emacsen-common/emacs-package-remove --prerm elpa-dash
fi
... and so does nothing,
because /var/lib/emacsen-common/state/package/installed/emacsen-common is
gone.
I couldnt add debug statements to the new maintainer scripts, but: reading
https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html#details-of-unpack-phase-of-installation-or-upgrade
I think we are now at step 3: '<new-preinst> upgrade <old-version>
<new-version>'
the elpa-dash preinst starts with
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" =
"abort-deconfigure" ] || [ "$1" = "abort-remove"
] ; then
so this does nothing.
then elpa-dash files are unpacked (step 4)
now /usr/lib/emacsen-common/packages/remove/elpa-dash contains
'usr/lib/dh-elpa/helper/remove $1 dash 2.19.1' so we can no longer remove
the old version
So the issue is that emacsen-common is unpacked before the elpa-dash package