Speed up vc-dir-update
* lisp/vc/vc-dir.el (vc-dir-update): Speed up. (https://lists.gnu.org/archive/html/emacs-devel/2019-12/msg00568.html)
This commit is contained in:
parent
52178a312d
commit
2c8f1539ab
1 changed files with 15 additions and 12 deletions
|
@ -390,19 +390,22 @@ If NOINSERT, ignore elements on ENTRIES which are not in the ewoc."
|
|||
;; We assume the ewoc is sorted too, which should be the
|
||||
;; case if we always add entries with vc-dir-update.
|
||||
(setq entries
|
||||
(let ((entry-dirs
|
||||
(mapcar (lambda (entry)
|
||||
(cons (file-name-directory
|
||||
(directory-file-name (expand-file-name (car entry))))
|
||||
entry))
|
||||
entries)))
|
||||
;; Sort: first files and then subdirectories.
|
||||
;; XXX: this is VERY inefficient, it computes the directory
|
||||
;; names too many times
|
||||
(sort entries
|
||||
(lambda (entry1 entry2)
|
||||
(let ((dir1 (file-name-directory
|
||||
(directory-file-name (expand-file-name (car entry1)))))
|
||||
(dir2 (file-name-directory
|
||||
(directory-file-name (expand-file-name (car entry2))))))
|
||||
(cond
|
||||
((string< dir1 dir2) t)
|
||||
((not (string= dir1 dir2)) nil)
|
||||
((string< (car entry1) (car entry2))))))))
|
||||
(mapcar #'cdr
|
||||
(sort entry-dirs
|
||||
(lambda (pair1 pair2)
|
||||
(let ((dir1 (car pair1))
|
||||
(dir2 (car pair2)))
|
||||
(cond
|
||||
((string< dir1 dir2) t)
|
||||
((not (string= dir1 dir2)) nil)
|
||||
((string< (cadr pair1) (cadr pair2))))))))))
|
||||
;; Insert directory entries in the right places.
|
||||
(let ((entry (car entries))
|
||||
(node (ewoc-nth vc-ewoc 0))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue