From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Joseph Turner Newsgroups: gmane.emacs.devel Subject: [PATCH] Fix persist-reset Date: Wed, 12 Jun 2024 18:49:40 -0700 Message-ID: <87o785pq6j.fsf@ushin.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="27148"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Adam Porter To: Emacs Devel Mailing List Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Jun 13 07:43:16 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sHdEw-0006qT-7T for ged-emacs-devel@m.gmane-mx.org; Thu, 13 Jun 2024 07:43:15 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sHdED-0006iJ-N1; Thu, 13 Jun 2024 01:42:29 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sHZb9-0007Xj-D9 for emacs-devel@gnu.org; Wed, 12 Jun 2024 21:49:55 -0400 Original-Received: from out-186.mta1.migadu.com ([2001:41d0:203:375::ba]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sHZb6-0003HU-Bh for emacs-devel@gnu.org; Wed, 12 Jun 2024 21:49:55 -0400 X-Envelope-To: emacs-devel@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ushin.org; s=key1; t=1718243385; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=5hZ6qWkAzQTtWiGGc3RpSRlSdqiBYFlFbBCbjDrcQMQ=; b=pGKKd2wwrhZBALEksufAF4kLBebNdKhmyWtucC2QlpZiDr75AWgAgNshx6uNPsGMf2sI7O 08j+1qtRdp5A4Ir91Zw581rcJpWL1wf/5wIrYoSlKwWnX9C0SOwYvjSBV88kWG+6XewdXT wDS6P8UuD2e2Pg/tMa7/P6t542ho6fBF+EFROR5yuqlcA0JyJitkf9WDl2v5fAETg/tAgb ovgwrXSDJXXe4SKZfNVb3s/hLcxNxRj8u4tALsiX/511+84n8+vt5/0cMY8n6+v7RySpJO PM3LXEIJTPCWk0UvEJZbE8kSr4TGs5prc4dKwMfcF+xFTelIl/u3V4gru0lTkQ== X-Envelope-To: adam@alphapapa.net X-Envelope-To: adam.porter@47ap.net X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. X-Migadu-Flow: FLOW_OUT Received-SPF: pass client-ip=2001:41d0:203:375::ba; envelope-from=joseph@ushin.org; helo=out-186.mta1.migadu.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 13 Jun 2024 01:42:27 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:320011 Archived-At: --=-=-= Content-Type: text/plain Previously, persist-reset set the value of SYM to its default without copying it, which caused subsequent modifications to the value of SYM to erroneously modify the default value. Thanks to Adam Porter for helping resolve this issue! Joseph --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Copy-default-when-resetting-with-persist-reset.patch >From 39b1a0a1d1ae25130a270a115ae8241af4ed6d75 Mon Sep 17 00:00:00 2001 From: Joseph Turner Date: Wed, 12 Jun 2024 18:45:32 -0700 Subject: [PATCH 1/2] Copy default when resetting with persist-reset Previously, persist-reset set the value of SYM to its default without copying it, which caused subsequent modifications to the value of SYM to erroneously modify the default value. Co-authored-by: Adam Porter --- persist.el | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/persist.el b/persist.el index 6cc94b4db3..df7f3836c5 100644 --- a/persist.el +++ b/persist.el @@ -122,9 +122,7 @@ (defun persist-symbol (symbol &optional initvalue) (let ((initvalue (or initvalue (symbol-value symbol)))) (add-to-list 'persist--symbols symbol) (put symbol 'persist t) - (if (hash-table-p initvalue) - (put symbol 'persist-default (copy-hash-table initvalue)) - (put symbol 'persist-default (persist-copy-tree initvalue t))))) + (put symbol 'persist-default (persist-copy initvalue)))) (defun persist--persistant-p (symbol) "Return non-nil if SYMBOL is a persistent variable." @@ -164,8 +162,8 @@ (defun persist-default (symbol) (get symbol 'persist-default)) (defun persist-reset (symbol) - "Reset the value of SYMBOL to the default." - (set symbol (persist-default symbol))) + "Set the value of SYMBOL to a copy of the default." + (set symbol (persist-copy (persist-default symbol)))) (defun persist-load (symbol) "Load the saved value of SYMBOL." @@ -241,5 +239,11 @@ (defun persist-copy-tree (tree &optional vectors-and-records) tree) tree))) +(defun persist-copy (obj) + "Return copy of OBJ." + (if (hash-table-p obj) + (copy-hash-table obj) + (persist-copy-tree obj t))) + (provide 'persist) ;;; persist.el ends here -- 2.41.0 --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0002-Test-persist-reset.patch >From 9423ecd164e5eb94bb91fbacfa2e3c821bdb2972 Mon Sep 17 00:00:00 2001 From: Joseph Turner Date: Wed, 12 Jun 2024 18:45:36 -0700 Subject: [PATCH 2/2] Test persist-reset --- test/persist-tests.el | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/persist-tests.el b/test/persist-tests.el index 62d8501493..d571325fae 100644 --- a/test/persist-tests.el +++ b/test/persist-tests.el @@ -134,3 +134,13 @@ (ert-deftest test-persist-location () (should-error (persist-save 'fred))) (delete-directory "./persist-defined-location" t))) + +(ert-deftest test-persist-reset () + "Symbol should be reset to a copy of the default." + (with-local-temp-persist + (persist-defvar persist--test-reset-variable (make-hash-table) "docstring") + (should-not (eq persist--test-reset-variable + (persist-default 'persist--test-reset-variable))) + (persist-reset 'persist--test-reset-variable) + (should-not (eq persist--test-reset-variable + (persist-default 'persist--test-reset-variable))))) -- 2.41.0 --=-=-=--