]> git.eshelyaron.com Git - emacs.git/commitdiff
(vc-next-action): Fix two instances of "free-var file" bug:
authorThien-Thi Nguyen <ttn@gnuvola.org>
Thu, 24 Jan 2008 13:09:13 +0000 (13:09 +0000)
committerThien-Thi Nguyen <ttn@gnuvola.org>
Thu, 24 Jan 2008 13:09:13 +0000 (13:09 +0000)
In both cases, convert single call to one wrapped in dolist.

lisp/ChangeLog
lisp/vc.el

index a80f7ef4f4105650107681048bcfdbdfcfa18fd3..18baed67097e413a73854b83e1384c12519a30cc 100644 (file)
@@ -18,6 +18,9 @@
        Don't do window resize if no window displays buffer.
        (vc-diff-internal): Use vc-diff-finish.
 
+       * vc.el (vc-next-action): Fix two instances of "free-var file" bug:
+       In both cases, convert single call to one wrapped in dolist.
+
 2008-01-24  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * vc.el: Add a TODO item about missing files.
index 1bb5c28d530f842a40d14190887ef10a6053a523..9d1c6682c4d5685adce5bf6610eff319766d4337 100644 (file)
@@ -1564,15 +1564,28 @@ merge in the changes into your working copy."
              (setq revision (read-string "New revision or backend: "))
              (let ((vsym (intern (upcase revision))))
                (if (member vsym vc-handled-backends)
-                   (vc-transfer-file file vsym)
+                   (dolist (file files) (vc-transfer-file file vsym))
                  (vc-checkin ready-for-commit revision))))))))
      ;; locked by somebody else (locking VCSes only)
      ((stringp state)
-      (let ((revision
-            (if verbose
-                (read-string "Revision to steal: ")
-              (vc-working-revision file))))
-       (dolist (file files) (vc-steal-lock file revision state))))
+      ;; In the old days, we computed the revision once and used it on
+      ;; the single file.  Then, for the 2007-2008 fileset rewrite, we
+      ;; computed the revision once (incorrectly, using a free var) and
+      ;; used it on all files.  To fix the free var bug, we can either
+      ;; use `(car files)' or do what we do here: distribute the
+      ;; revision computation among `files'.  Although this may be
+      ;; tedious for those backends where a "revision" is a trans-file
+      ;; concept, it is nonetheless correct for both those and (more
+      ;; importantly) for those where "revision" is a per-file concept.
+      ;; If the intersection of the former group and "locking VCSes" is
+      ;; non-empty [I vaguely doubt it --ttn], we can reinstate the
+      ;; pre-computation approach of yore.
+      (dolist (file files)
+        (vc-steal-lock
+         file (if verbose
+                  (read-string (format "%s revision to steal: " file))
+                (vc-working-revision file))
+         state)))
      ;; needs-patch
      ((eq state 'needs-patch)
       (dolist (file files)