org-persist: Use associated file functions for GC

* lisp/org-persist.el (org-persist-gc, org-persist--remove-from-index,
org-persist-gc:file, org-persist-gc:url, org-persist-gc:version,
org-persist-gc:url, org-persist-associated-files:generic,
org-persist-associated-files:url, org-persist-associated-files:elisp,
org-persist-associated-files:index,
org-persist-associated-files:version,
org-persist-associated-files:file): Use associated files for GC, and
move the associated files functions into the public
namespace (i.e. remove the double dash).
This commit is contained in:
TEC 2022-12-11 02:49:26 +08:00
parent 8b8a65ed02
commit 534633d508
Signed by: tec
SSH Key Fingerprint: SHA256:eobz41Mnm0/iYWBvWThftS0ElEs1ftBr6jamutnXc/A
1 changed files with 30 additions and 33 deletions

View File

@ -420,7 +420,9 @@ Return PLIST."
(org-persist-collection-let collection
(dolist (cont (cons container container))
(unless (listp (car container))
(org-persist-gc:generic cont collection))
(org-persist-gc:generic cont collection)
(dolist (afile (org-persist-associated-files:generic cont collection))
(delete-file afile)))
(remhash (cons cont associated) org-persist--index-hash)
(when path (remhash (cons cont (list :file path)) org-persist--index-hash))
(when inode (remhash (cons cont (list :inode inode)) org-persist--index-hash))
@ -909,18 +911,9 @@ Do nothing in an indirect buffer."
(defalias 'org-persist-gc:elisp #'ignore)
(defalias 'org-persist-gc:index #'ignore)
(defun org-persist-gc:file (container collection)
"Garbage collect file CONTAINER in COLLECTION."
(let ((file (org-persist-read container (plist-get collection :associated))))
(when (file-exists-p file)
(delete-file file))))
(defun org-persist-gc:url (container collection)
"Garbage collect url CONTAINER in COLLECTION."
(let ((file (org-persist-read container (plist-get collection :associated))))
(when (file-exists-p file)
(delete-file file))))
(defalias 'org-persist-gc:version #'ignore)
(defalias 'org-persist-gc:file #'ignore)
(defalias 'org-persist-gc:url #'ignore)
(defun org-persist--gc-persist-file (persist-file)
"Garbage collect PERSIST-FILE."
@ -929,22 +922,30 @@ Do nothing in an indirect buffer."
(when (org-directory-empty-p (file-name-directory persist-file))
(delete-directory (file-name-directory persist-file)))))
(defmacro org-persist--associated-files:generic (container collection)
"List associated files in `org-persist-directory' for CONTAINER in COLLECTION."
(defmacro org-persist-associated-files:generic (container collection)
"List associated files in `org-persist-directory' of CONTAINER in COLLECTION."
`(let* ((c (org-persist--normalize-container ,container))
(gc-func-symbol (intern (format "org-persist--associated-files:%s" (car c)))))
(and (fboundp gc-func-symbol)
(funcall gc-func-symbol c ,collection))))
(assocf-func-symbol (intern (format "org-persist-associated-files:%s" (car c)))))
(if (fboundp assocf-func-symbol)
(funcall assocf-func-symbol c ,collection)
(error "org-persist: Read function %s not defined"
assocf-func-symbol))))
(defun org-persist--associated-files:url (_ collection)
"List url-associated files in `org-persist-directory' for COLLECTION."
(let* ((persist-file (org-file-name-concat
org-persist-directory
(plist-get collection :persist-file)))
(data (or (gethash persist-file org-persist--write-cache)
(org-persist--read-elisp-file persist-file)))
(url-file (alist-get '(url nil) data nil nil #'equal)))
(and url-file (list url-file))))
(defalias 'org-persist-associated-files:elisp #'ignore)
(defalias 'org-persist-associated-files:index #'ignore)
(defalias 'org-persist-associated-files:version #'ignore)
(defun org-persist-associated-files:file (_ collection)
"List file CONTAINER associated files of COLLECTION in `org-persist-directory'."
(let ((file (org-persist-read container (plist-get collection :associated))))
(when (file-exists-p file)
(list file))))
(defun org-persist-associated-files:url (container collection)
"List url CONTAINER associated files of COLLECTION in `org-persist-directory'."
(let ((file (org-persist-read container (plist-get collection :associated))))
(when (file-exists-p file)
(list file))))
(defun org-persist-gc ()
"Remove expired or unregistered containers and orphaned files.
@ -988,13 +989,9 @@ Also, remove containers associated with non-existing files."
(push collection new-index)
(dolist (container (plist-get collection :container))
(dolist (associated-file
(org-persist--associated-files:generic
(org-persist-associated-files:generic
container collection))
(setq orphan-files
(delete (org-file-name-concat
org-persist-directory
associated-file)
orphan-files))))))))
(setq orphan-files (delete associated-file orphan-files))))))))
(mapc #'org-persist--gc-persist-file orphan-files)
(setq org-persist--index (nreverse new-index)))))