(with-vc-properties): Deal with directory arguments. (Bug#5298)
authorDan Nicolaescu <dann@ics.uci.edu>
Sun, 17 Jan 2010 21:31:25 +0000 (13:31 -0800)
committerDan Nicolaescu <dann@ics.uci.edu>
Sun, 17 Jan 2010 21:31:25 +0000 (13:31 -0800)
lisp/ChangeLog
lisp/vc.el

index fb14b30..d3b9a27 100644 (file)
@@ -1,5 +1,7 @@
 2010-01-17  Dan Nicolaescu  <dann@ics.uci.edu>
 
+       * vc.el (with-vc-properties): Deal with directory arguments.  (Bug#5298)
+
        * vc-dir.el (vc-dir-resynch-file): Update the vc-dir header when
        resyncing a directory.
 
index 3a0cf80..2ca36ef 100644 (file)
@@ -791,13 +791,23 @@ in their implementation of vc-BACKEND-diff.")
 
 (defmacro with-vc-properties (files form settings)
   "Execute FORM, then maybe set per-file properties for FILES.
+If any of FILES is actually a directory, then do the same for all
+buffers for files in that directory.
 SETTINGS is an association list of property/value pairs.  After
 executing FORM, set those properties from SETTINGS that have not yet
 been updated to their corresponding values."
   (declare (debug t))
-  `(let ((vc-touched-properties (list t)))
-     ,form
+  `(let ((vc-touched-properties (list t))
+        (flist nil))
      (dolist (file ,files)
+       (if (file-directory-p file)
+          (dolist (buffer (buffer-list))
+            (let ((fname (buffer-file-name buffer)))
+              (when (and fname (vc-string-prefix-p file fname))
+                (push fname flist))))
+        (push file flist)))
+     ,form
+     (dolist (file flist)
        (dolist (setting ,settings)
          (let ((property (car setting)))
            (unless (memq property vc-touched-properties)