emacs-diffs
[Top][All Lists]
Advanced

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

master b74aaee 1/2: Add a new function 'file-backup-file-names'


From: Lars Ingebrigtsen
Subject: master b74aaee 1/2: Add a new function 'file-backup-file-names'
Date: Mon, 24 Aug 2020 13:15:42 -0400 (EDT)

branch: master
commit b74aaee5a473f70e5b78218724cd4d10b123c388
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Add a new function 'file-backup-file-names'
    
    * lisp/files.el (file-backup-file-names): New function (bug#24089).
    (file-newest-backup): Use it.
---
 etc/NEWS      |  4 ++++
 lisp/files.el | 30 ++++++++++++++++--------------
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index a65852f..cd8cc31 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1108,6 +1108,10 @@ ledit.el, lmenu.el, lucid.el and old-whitespace.el.
 
 * Lisp Changes in Emacs 28.1
 
+---
+*** New function 'file-backup-file-names'.
+This function returns all backup file names for the file in question.
+
 +++
 ** The 'count-lines' function now takes an optional parameter to
 ignore invisible lines.
diff --git a/lisp/files.el b/lisp/files.el
index f92c379..5102585 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -5655,25 +5655,27 @@ like `write-region' does."
 
 (defun file-newest-backup (filename)
   "Return most recent backup file for FILENAME or nil if no backups exist."
+  (car (file-backup-file-names filename)))
+
+(defun file-backup-file-names (filename)
+  "Return a list of backup files for FILENAME.
+The list will be sorted by newness."
   ;; `make-backup-file-name' will get us the right directory for
   ;; ordinary or numeric backups.  It might create a directory for
   ;; backups as a side-effect, according to `backup-directory-alist'.
   (let* ((filename (file-name-sans-versions
                    (make-backup-file-name (expand-file-name filename))))
-        (file (file-name-nondirectory filename))
-        (dir  (file-name-directory    filename))
-        (comp (file-name-all-completions file dir))
-         (newest nil)
-         tem)
-    (while comp
-      (setq tem (pop comp))
-      (cond ((and (backup-file-name-p tem)
-                  (string= (file-name-sans-versions tem) file))
-             (setq tem (concat dir tem))
-             (if (or (null newest)
-                     (file-newer-than-file-p tem newest))
-                 (setq newest tem)))))
-    newest))
+         (dir (file-name-directory filename)))
+    (sort
+     (seq-filter
+      (lambda (candidate)
+        (and (backup-file-name-p candidate)
+             (string= (file-name-sans-versions candidate) filename)))
+      (mapcar
+       (lambda (file)
+         (concat dir file))
+       (file-name-all-completions (file-name-nondirectory filename) dir)))
+     #'file-newer-than-file-p)))
 
 (defun rename-uniquely ()
   "Rename current buffer to a similar name not already taken.



reply via email to

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