Browse Source

org-persist.el: Catch write errors

* lisp/org-persist.el (org-persist--get-index): Check index file.
(org-persist--read-index): Warn when index file is missing.
(org-persist-write): Report write access errors.
Ihor Radchenko 4 years ago
parent
commit
bad854d5fa
1 changed files with 18 additions and 4 deletions
  1. 18 4
      lisp/org-persist.el

+ 18 - 4
lisp/org-persist.el

@@ -78,6 +78,7 @@ a data variable.  Each plist contains the following properties:
 (defun org-persist--get-index (var &optional buffer)
 (defun org-persist--get-index (var &optional buffer)
   "Return plist used to store VAR in BUFFER.
   "Return plist used to store VAR in BUFFER.
 When BUFFER is nil, return plist for global VAR."
 When BUFFER is nil, return plist for global VAR."
+  (org-persist--read-index)
   (let* ((buffer-file (when buffer (buffer-file-name (or (buffer-base-buffer buffer)
   (let* ((buffer-file (when buffer (buffer-file-name (or (buffer-base-buffer buffer)
                                                          buffer))))
                                                          buffer))))
          (inode (when buffer-file (file-attribute-inode-number (file-attributes buffer-file)))))
          (inode (when buffer-file (file-attribute-inode-number (file-attributes buffer-file)))))
@@ -103,10 +104,12 @@ When BUFFER is nil, return plist for global VAR."
 (defun org-persist--read-index ()
 (defun org-persist--read-index ()
   "Read `org-persist--index'"
   "Read `org-persist--index'"
   (unless org-persist--index
   (unless org-persist--index
-    (when (file-exists-p (org-file-name-concat org-persist-directory org-persist-index-file))
-      (with-temp-buffer
-        (insert-file-contents (org-file-name-concat org-persist-directory org-persist-index-file))
-        (setq org-persist--index (read (current-buffer)))))))
+    (if (file-exists-p (org-file-name-concat org-persist-directory org-persist-index-file))
+        (with-temp-buffer
+          (insert-file-contents (org-file-name-concat org-persist-directory org-persist-index-file))
+          (setq org-persist--index (read (current-buffer))))
+      (warn "Cannot read org-persist index from %s."
+            (org-file-name-concat org-persist-directory org-persist-index-file)))))
 
 
 (cl-defun org-persist-register (var &optional buffer &key inherit)
 (cl-defun org-persist-register (var &optional buffer &key inherit)
   "Register VAR in BUFFER to be persistent.
   "Register VAR in BUFFER to be persistent.
@@ -172,6 +175,17 @@ When BUFFER is `all', unregister VAR in all buffers."
                             (plist-get index :variable))
                             (plist-get index :variable))
             (unless (file-exists-p org-persist-directory)
             (unless (file-exists-p org-persist-directory)
               (make-directory org-persist-directory))
               (make-directory org-persist-directory))
+            (unless (file-exists-p org-persist-directory)
+              (warn "Failed to create org-persist storage in %s."
+                    org-persist-directory)
+              (let ((dir (directory-file-name
+                          (file-name-as-directory org-persist-directory))))
+                (while (and (not (file-exists-p dir))
+                            (not (equal dir (setq dir (directory-file-name
+                                                     (file-name-directory dir)))))))
+                (unless (file-writable-p dir)
+                  (message "Missing write access rights to org-persist-directory: %S"
+                           org-persist-directory))))
             (with-temp-file (org-file-name-concat org-persist-directory org-persist-index-file)
             (with-temp-file (org-file-name-concat org-persist-directory org-persist-index-file)
               (prin1 org-persist--index (current-buffer)))
               (prin1 org-persist--index (current-buffer)))
             (let ((file (org-file-name-concat org-persist-directory (plist-get index :persist-file)))
             (let ((file (org-file-name-concat org-persist-directory (plist-get index :persist-file)))