GNU bug report logs - #75779
persist-defvar symbol bound before definition, causing data loss

Previous Next

Package: emacs;

Reported by: Joseph Turner <joseph <at> breatheoutbreathe.in>

Date: Thu, 23 Jan 2025 07:47:02 UTC

Severity: normal

Full log


View this message in rfc822 format

From: Joseph Turner <joseph <at> breatheoutbreathe.in>
To: 75779 <at> debbugs.gnu.org
Cc: Adam Porter <adam <at> alphapapa.net>
Subject: bug#75779: persist-defvar symbol bound before definition, causing data loss
Date: Sun, 02 Feb 2025 16:08:53 -0800
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.