# HG changeset patch # User Eric S. Raymond # Date 1198766504 0 # Node ID 4d223562bbfa36acf945fe11cf1521cc9d881a9d # Parent 410e13519acb976c54f18e62de10b8ba5f0f70fc * vc.el (vc-dired-ignorable-p, vc-dired-hook): Speed optimization; use completion-ignored-extensions to detect files that should be ignorted in VC-Dired listings, heading off lots of expensive calls to (vc-state). diff -r 410e13519acb -r 4d223562bbfa lisp/ChangeLog --- a/lisp/ChangeLog Thu Dec 27 14:00:42 2007 +0000 +++ b/lisp/ChangeLog Thu Dec 27 14:41:44 2007 +0000 @@ -1,3 +1,10 @@ +2007-12-27 Eric S. Raymond + + * vc.el (vc-dired-ignorable-p, vc-dired-hook): Speed optimization; + use completion-ignored-extensions to detect files that should be + ignorted in VC-Dired listings, heading off lots of expensive calls + to (vc-state). + 2007-12-27 Vinicius Jose Latorre * ps-print.el (ps-mark-active-p): Fun returned back. @@ -6,8 +13,8 @@ 2007-12-27 Eric S. Raymond - * (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put - machinery in place to support editing of change comments + * vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el: Put + new machinery in place to support editing of change comments with 'e' in a log-view buffer. Not documented yet as this only works for SCCS, RCS, and maybe CVS if you have admin privileges. When we have backend support for Subversion and diff -r 410e13519acb -r 4d223562bbfa lisp/vc.el --- a/lisp/vc.el Thu Dec 27 14:00:42 2007 +0000 +++ b/lisp/vc.el Thu Dec 27 14:41:44 2007 +0000 @@ -2327,6 +2327,16 @@ (replace-match (substring (concat vc-info " ") 0 10) t t nil 1))) +(defun vc-dired-ignorable-p (filename) + "Should FILENAME be ignored in VC-Dired listings?" + (catch t + (dolist (ignorable completion-ignored-extensions) + (let ((ext (substring filename + (- (length filename) + (length ignorable))))) + (if (string= ignorable ext) (throw t t)))) + nil)) + (defun vc-dired-hook () "Reformat the listing according to version control. Called by dired after any portion of a vc-dired buffer has been read in." @@ -2372,7 +2382,11 @@ (t (vc-dired-reformat-line nil) (forward-line 1)))) - ;; ordinary file + ;; try to head off calling the expensive state query - + ;; ignore object files, TeX intermediate files, and so forth. + ((vc-dired-ignorable-p filename) + (dired-kill-line)) + ;; ordinary file -- call the (possibly expensive) state query ((and (vc-backend filename) (not (and vc-dired-terse-mode (vc-up-to-date-p filename))))