emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/annotate 04a5710cf6 334/372: - prevented saving a file whi


From: ELPA Syncer
Subject: [nongnu] elpa/annotate 04a5710cf6 334/372: - prevented saving a file whith an empty database;
Date: Fri, 4 Feb 2022 16:59:18 -0500 (EST)

branch: elpa/annotate
commit 04a5710cf6b0c738564fa343089d8d88f8c7ae2d
Author: cage <cage@invalid>
Commit: cage <cage@invalid>

    - prevented saving a file whith an empty database;
---
 annotate.el | 44 ++++++++++++++++++++++++++++++++------------
 1 file changed, 32 insertions(+), 12 deletions(-)

diff --git a/annotate.el b/annotate.el
index 6ff3fc2ad1..6b1a2a1d64 100644
--- a/annotate.el
+++ b/annotate.el
@@ -155,6 +155,13 @@ database is not filtered at all."
   :type 'boolean
   :group 'annotate)
 
+(defcustom annotate-database-confirm-deletion t
+ "If non nil a prompt asking confirmation before deleting a
+database file that is going to be empty after saving an annotated
+file will be shown"
+  :type 'boolean
+  :group 'annotate)
+
 (defcustom annotate-annotation-max-size-not-place-new-line 15
  "The maximum `string-width` allowed for an annotation to be
  placed on the right margin of the window instead of its own line
@@ -1565,19 +1572,32 @@ annotation."
         (ignore-errors (%load-annotation-data))
       (%load-annotation-data))))
 
-(defun annotate-dump-annotation-data (data)
+(defun annotate-dump-annotation-data (data &optional save-empty-db)
   "Save `data` into annotation file."
-  (with-temp-file annotate-file
-    (let* ((print-length nil)
-           (%abbreviate-filename (lambda (record)
-                                   (let ((full-filename 
(annotate-filename-from-dump    record))
-                                         (annotations   
(annotate-annotations-from-dump record))
-                                         (file-checksum 
(annotate-checksum-from-dump    record)))
-                                     (annotate-make-record 
(abbreviate-file-name full-filename)
-                                                           annotations
-                                                           file-checksum))))
-           (actual-data (mapcar %abbreviate-filename data)))
-      (prin1 actual-data (current-buffer)))))
+  (if (or save-empty-db
+          data)
+      (with-temp-file annotate-file
+        (let* ((print-length nil)
+               (%abbreviate-filename (lambda (record)
+                                       (let ((full-filename 
(annotate-filename-from-dump    record))
+                                             (annotations   
(annotate-annotations-from-dump record))
+                                             (file-checksum 
(annotate-checksum-from-dump    record)))
+                                         (annotate-make-record 
(abbreviate-file-name full-filename)
+                                                               annotations
+                                                               
file-checksum))))
+               (actual-data (mapcar %abbreviate-filename data)))
+          (prin1 actual-data (current-buffer))))
+    (let* ((confirm-message    "Delete annotations database file %S? [y/N] ")
+           (delete-confirmed-p (or (not annotate-database-confirm-deletion)
+                                   (string= (read-from-minibuffer (format 
confirm-message
+                                                                           
annotate-file))
+                                            "y"))))
+      (if delete-confirmed-p
+          (condition-case err
+              (delete-file annotate-file t)
+            (error (message "error removing annotation database: %S"
+                            (error-message-string err))))
+        (annotate-dump-annotation-data data t)))))
 
 (cl-defmacro with-matching-annotation-fns ((filename
                                             beginning



reply via email to

[Prev in Thread] Current Thread [Next in Thread]