branch: externals/org commit 7219b006bd7ea67265d91e1d27a4addeaf4ff5e7 Author: Ihor Radchenko <yanta...@posteo.net> Commit: Ihor Radchenko <yanta...@posteo.net>
org-element: Fix loading obsolete persistent caches * lisp/org-element.el (org-element-cache-version): New constant defining the current cache version. (org-element-cache-reset): Use the new variable. * lisp/org.el (org-mode): Assert loading the correct cache version. Reported-by: Gregor Zattler <telegr...@gmx.net> Link: https://orgmode.org/list/87350cvm3d....@no.lan --- lisp/org-element.el | 9 +++++++-- lisp/org.el | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index b2c5b0402f..3597b9d271 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -5419,6 +5419,11 @@ indentation removed from its contents." (defvar org-element-cache-persistent t "Non-nil when cache should persist between Emacs sessions.") +(defconst org-element-cache-version "2.1" + "Version number for Org AST structure. +Used to avoid loading obsolete AST representation when using +`org-element-cache-persistent'.") + (defvar org-element-cache-sync-idle-time 0.6 "Length, in seconds, of idle time before syncing cache.") @@ -7426,12 +7431,12 @@ the cache persistence in the buffer." (when (and org-element-cache-persistent (buffer-file-name (current-buffer))) (org-persist-register - '((elisp org-element--cache) (version "2.1")) + `((elisp org-element--cache) (version ,org-element-cache-version)) (current-buffer)) (org-persist-register 'org-element--headline-cache (current-buffer) - :inherit '((elisp org-element--cache) (version "2.1"))))) + :inherit `((elisp org-element--cache) (version ,org-element-cache-version))))) (setq-local org-element--cache-change-tic (buffer-chars-modified-tick)) (setq-local org-element--cache-last-buffer-size (buffer-size)) (setq-local org-element--cache-gapless nil) diff --git a/lisp/org.el b/lisp/org.el index 4079aaace9..e5df7cc825 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -4800,6 +4800,7 @@ This is for getting out of special buffers like capture.") ;; babel (require 'ob) +(defvar org-element-cache-version); Defined in org-element.el (defvar org-element-cache-persistent); Defined in org-element.el (defvar org-element-use-cache); Defined in org-element.el (defvar org-mode-loading nil @@ -4890,7 +4891,10 @@ The following commands are available: (org-element-cache-reset) (when (and org-element-cache-persistent org-element-use-cache) - (org-persist-load 'org-element--cache (current-buffer) 'match-hash :read-related t)) + (org-persist-load + `((elisp org-element--cache) (version ,org-element-cache-version)) + (current-buffer) + 'match-hash :read-related t)) ;; Initialize macros templates. (org-macro-initialize-templates) ;; Initialize radio targets.