| 
					
				 | 
			
			
				@@ -336,6 +336,18 @@ FORMAT and ARGS are passed to `message'." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               gc-func-symbol)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      (funcall gc-func-symbol c ,collection))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(defmacro org-persist--gc-expired-p (cnd collection) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "Check if expiry condition CND triggers for COLLECTION." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  `(pcase ,cnd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     (`nil t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     (`never nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ((pred numberp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (when (plist-get ,collection :access-time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (<= (float-time) (+ (plist-get ,collection :access-time) (* ,cnd 24 60 60))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     ((pred functionp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      (funcall ,cnd ,collection)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     (_ (error "org-persist: Unsupported expiry type %S" ,cnd)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;;; Working with index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defmacro org-persist-collection-let (collection &rest body) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -792,7 +804,9 @@ The arguments have the same meaning as in `org-persist-read'." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Save CONTAINER according to ASSOCIATED. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ASSOCIATED can be a plist, a buffer, or a string. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 A buffer is treated as (:buffer ASSOCIATED). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-A string is treated as (:file ASSOCIATED)." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+A string is treated as (:file ASSOCIATED). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The return value is nil when writing fails and the written value (as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+returned by `org-persist-read') on success." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (setq associated (org-persist--normalize-associated associated)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ;; Update hash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (when (and (plist-get associated :file) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -808,7 +822,8 @@ A string is treated as (:file ASSOCIATED)." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         (let ((file (org-file-name-concat org-persist-directory (plist-get collection :persist-file))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               (data (mapcar (lambda (c) (cons c (org-persist-write:generic c collection))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             (plist-get collection :container)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          (org-persist--write-elisp-file file data)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          (org-persist--write-elisp-file file data) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          (org-persist-read container associated)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-persist-write-all (&optional associated) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Save all the persistent data. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -853,18 +868,6 @@ 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--gc-expired-p (cnd collection) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  "Check if expiry condition CND triggers for COLLECTION." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  `(pcase ,cnd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     (`nil t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     (`never nil) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     ((pred numberp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (when (plist-get ,collection :access-time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        (<= (float-time) (+ (plist-get ,collection :access-time) (* ,cnd 24 60 60))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     ((pred functionp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (funcall ,cnd ,collection)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     (_ (error "org-persist: Unsupported expiry type %S" ,cnd)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-persist-gc () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Remove expired or unregisted containers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Also, remove containers associated with non-existing files." 
			 |