changeset 87434:4d223562bbfa

* 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).
author Eric S. Raymond <esr@snark.thyrsus.com>
date Thu, 27 Dec 2007 14:41:44 +0000
parents 410e13519acb
children 13951469ac3a
files lisp/ChangeLog lisp/vc.el
diffstat 2 files changed, 24 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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  <esr@snark.thyrsus.com>
+
+	* 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  <viniciusjl@ig.com.br>
 
 	* ps-print.el (ps-mark-active-p): Fun returned back.
@@ -6,8 +13,8 @@
 
 2007-12-27  Eric S. Raymond  <esr@snark.thyrsus.com>
 
-	* (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
--- 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))))