aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Leech-Pepin <jonathan.leechpepin@gmail.com>2014-11-18 14:28:15 -0500
committerJonathan Leech-Pepin <jonathan.leechpepin@gmail.com>2014-11-18 14:28:15 -0500
commit13758581e7c8a5cbfcedb1b8c0eb4089a058ff80 (patch)
treeaaf5d1f126794578d2c7fa6f80b2c168cf1ca171
parent0b2a393bb232c3da5362b45def6371d2c7d72b27 (diff)
Provide cache invalidation
(sx-cache--invalidate): Invalidate provided cache. Allows for invalidating variables associated with cache using `makunbound`. Cache can be reinitialized using arg `init-method`. (sx-cache-invalidate-all): Invalidate all caches then call `sx-initialize` to reinitialize. Arg `save-auth` prevents access_token from being lost.
-rw-r--r--sx-cache.el26
1 files changed, 26 insertions, 0 deletions
diff --git a/sx-cache.el b/sx-cache.el
index e3b356b..45b379c 100644
--- a/sx-cache.el
+++ b/sx-cache.el
@@ -67,6 +67,32 @@ DATA will be written as returned by `prin1'."
(sx-cache-get-file-name cache))
data)
+(defun sx-cache--invalidate (cache &optional vars init-method)
+ "Set cache CACHE to nil.
+
+VARS is a list of variables to set to unbind to ensure cache is
+cleared.
+If INIT-METHOD is defined, call it after all invalidation to
+re-initialize the cache."
+ (sx-cache-set cache nil)
+ (mapc #'makunbound vars)
+ (funcall init-method))
+
+(defun sx-cache-invalidate-all (&optional save-auth)
+ "Invalidate all caches using `sx-cache--invalidate'.
+
+Afterwards reinitialize caches using `sx-initialize'.
+
+If SAVE-AUTH is non-nil, do not clear AUTH cache."
+ (let ((caches (let ((default-directory sx-cache-directory))
+ (file-expand-wildcards "*.el"))))
+ (when save-auth
+ (setq caches (remove-if (lambda (x)
+ (string= x "auth.el")) caches)))
+ (lwarn 'stack-mode :debug "Invalidating: %S" caches)
+ (mapc #'sx-cache--invalidate caches)
+ (sx-initialize 'force)))
+
(provide 'sx-cache)
;;; sx-cache.el ends here