[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master c9e3def: Speed up directory-files-recursively
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] master c9e3def: Speed up directory-files-recursively |
Date: |
Wed, 10 Dec 2014 04:38:29 +0000 |
branch: master
commit c9e3deffab6e9de3a214a3b7f7a5921018fc1a9d
Author: Lars Magne Ingebrigtsen <address@hidden>
Commit: Lars Magne Ingebrigtsen <address@hidden>
Speed up directory-files-recursively
* files.el (directory-files-recursively): Use
`file-name-all-completions' instead of `directory-files' for
greater speed.
---
lisp/ChangeLog | 4 ++++
lisp/files.el | 27 +++++++++++++++------------
2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 20461a6..445a461 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,9 @@
2014-12-10 Lars Magne Ingebrigtsen <address@hidden>
+ * files.el (directory-files-recursively): Use
+ `file-name-all-completions' instead of `directory-files' for
+ greater speed.
+
* net/shr.el (shr-tag-object): Don't bug out on text elements in
<object>.
diff --git a/lisp/files.el b/lisp/files.el
index 5127519..e948c74 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -769,18 +769,21 @@ and alphabetical order.
If INCLUDE-DIRECTORIES, also include directories that have matching names."
(let ((result nil)
(files nil))
- (dolist (file (directory-files dir t))
- (let ((leaf (file-name-nondirectory file)))
- (unless (member leaf '("." ".."))
- (if (file-directory-p file)
- (progn
- (when (and include-directories
- (string-match match leaf))
- (push file files))
- (setq result (nconc result (directory-files-recursively
- file match include-directories))))
- (when (string-match match leaf)
- (push file files))))))
+ (dolist (file (sort (file-name-all-completions "" dir)
+ 'string<))
+ (unless (member file '("./" "../"))
+ (if (= (aref file (1- (length file))) ?/)
+ (progn
+ (setq result (nconc result (directory-files-recursively
+ (expand-file-name file dir)
+ match include-directories)))
+ (when (and include-directories
+ (string-match match
+ (substring file 0 (1- (length file)))))
+ (setq result (nconc result (list
+ (expand-file-name file dir))))))
+ (when (string-match match file)
+ (push (expand-file-name file dir) files)))))
(nconc result (nreverse files))))
(defun load-file (file)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master c9e3def: Speed up directory-files-recursively,
Lars Ingebrigtsen <=