GNU bug report logs -
#75779
persist-defvar symbol bound before definition, causing data loss
Previous Next
Full log
Message #8 received at 75779 <at> debbugs.gnu.org (full text, mbox):
Ping
Joseph Turner via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> writes:
> This bug report was previously submitted as bug#75684, but it appears to
> have been lost by the mailing list. Here it is again:
>
> Variables defined with persist-defvar which have persisted values are
> sometimes bound to their persisted values before the package is loaded.
> persist-defvar then incorrectly sets the symbol's persist-default
> property to its persisted value, which then causes the persist value to
> sometimes be deleted.
>
> The bug in the wild: https://github.com/alphapapa/activities.el/issues/109
>
> I am able to reproduce this issue on Emacs 29.4:
>
> --8<---------------cut here---------------start------------->8---
> rm -rf /tmp/test-persist-issue/
> mkdir /tmp/test-persist-issue
> cat > /tmp/test-persist-issue/init.el <<EOF
> (package-initialize)
>
> (unless (package-installed-p 'test-persist-issue)
> (package-vc-install "https://git.sr.ht/~breatheoutbreathein/test-persist-issue"))
> EOF
>
> emacs --init-directory=/tmp/test-persist-issue/
> --8<---------------cut here---------------end--------------->8---
>
> Wait for Emacs to install test-persist-issue.el and persist.el, then:
>
> --8<---------------cut here---------------start------------->8---
> (progn
> (require 'test-persist-issue)
> (setf test-persist-issue 'foo)
> (persist-save 'test-persist-issue)
> (kill-emacs))
> --8<---------------cut here---------------end--------------->8---
>
> /tmp/test-persist-issue/persist/test-persist-issue now exists as
> expected. Now run:
>
> --8<---------------cut here---------------start------------->8---
> rm -rf /tmp/test-persist-issue/elpa/
> emacs --init-directory=/tmp/test-persist-issue/
> --8<---------------cut here---------------end--------------->8---
>
> Wait for installation again, then evaluate:
>
> --8<---------------cut here---------------start------------->8---
> (progn
> ;; (persist-default 'test-persist-issue) ;; foo (should be nil)
> (persist-save 'test-persist-issue))
> --8<---------------cut here---------------end--------------->8---
>
> The second time Emacs is opened, just before the call to persist-defvar
> in activities.el, the test-persist-issue variable is already bound to
> the persisted value, which results in the persisted value being
> incorrectly set as the default.
>
> Why is the persist variable bound before the persist-defvar form?
>
> This example uses package-vc for the sake of reliable bug reproduction,
> but the issue also exists with package.el, as in the original report.
>
> Thank you!
>
> Joseph
>
> P.S. The linked git repo contains two files, both of which appear to be
> necessary to reproduce the issue. For the sake of future bug
> reproduction, I have attached both files to this email.
>
> [2. application/emacs-lisp; test-persist-issue.el]...
>
> [3. application/emacs-lisp; test-persist-issue-other-file.el]...
This bug report was last modified 138 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.