aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog7
-rw-r--r--lisp/vc-dispatcher.el44
2 files changed, 25 insertions, 26 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 65b7bc0e3e3..c7e546b6978 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
12008-05-09 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * vc-dispatcher.el (vc-dispatcher-browsing): Use derived-mode-p.
4 (vc-dir-prepare-status-buffer): Use vc-dispatcher-browsing.
5 (vc-dispatcher-in-fileset-p): New fun.
6 (vc-dispatcher-selection-set): Use it to properly handle directories.
7
12008-05-09 Dan Nicolaescu <dann@ics.uci.edu> 82008-05-09 Dan Nicolaescu <dann@ics.uci.edu>
2 9
3 * vc.el (vc-version-diff, vc-print-log, vc-revert, vc-rollback) 10 * vc.el (vc-version-diff, vc-print-log, vc-revert, vc-rollback)
diff --git a/lisp/vc-dispatcher.el b/lisp/vc-dispatcher.el
index 002ac5438e6..2970854c019 100644
--- a/lisp/vc-dispatcher.el
+++ b/lisp/vc-dispatcher.el
@@ -671,7 +671,7 @@ See `run-hooks'."
671 (unless create-new 671 (unless create-new
672 (dolist (buffer (buffer-list)) 672 (dolist (buffer (buffer-list))
673 (set-buffer buffer) 673 (set-buffer buffer)
674 (when (and (eq major-mode 'vc-dir-mode) 674 (when (and (vc-dispatcher-browsing)
675 (string= (expand-file-name default-directory) dir)) 675 (string= (expand-file-name default-directory) dir))
676 (return buffer))))))) 676 (return buffer)))))))
677 (or buf 677 (or buf
@@ -1326,7 +1326,17 @@ NOT-URGENT means it is ok to continue if the user says not to save."
1326 1326
1327(defun vc-dispatcher-browsing () 1327(defun vc-dispatcher-browsing ()
1328 "Are we in a directory browser buffer?" 1328 "Are we in a directory browser buffer?"
1329 (eq major-mode 'vc-dir-mode)) 1329 (derived-mode-p 'vc-dir-mode))
1330
1331(defun vc-dispatcher-in-fileset-p (fileset)
1332 (let ((member nil))
1333 (while (and (not member) fileset)
1334 (let ((elem (pop fileset)))
1335 (if (if (file-directory-p elem)
1336 (eq t (compare-strings buffer-file-name nil (length elem)
1337 elem nil nil))
1338 (eq (current-buffer) (get-file-buffer elem)))
1339 (setq member t))))))
1330 1340
1331(defun vc-dispatcher-selection-set () 1341(defun vc-dispatcher-selection-set ()
1332 "Deduce a set of files to which to apply an operation. Return the fileset. 1342 "Deduce a set of files to which to apply an operation. Return the fileset.
@@ -1350,31 +1360,13 @@ containing that file. Otherwise, throw an error."
1350 (vc-dispatcher-selection-set))) 1360 (vc-dispatcher-selection-set)))
1351 ;; No good set here, throw error 1361 ;; No good set here, throw error
1352 (t (error "No fileset is available here."))))) 1362 (t (error "No fileset is available here.")))))
1353 ;; We assume, in order to avoid unpleasant surprises to the user, 1363 ;; We assume, in order to avoid unpleasant surprises to the user,
1354 ;; that a fileset is not in good shape to be handed to the user if the 1364 ;; that a fileset is not in good shape to be handed to the user if the
1355 ;; buffers visiting the fileset don't match the on-disk contents. 1365 ;; buffers visiting the fileset don't match the on-disk contents.
1356 (dolist (file files) 1366 ;; This is actually untrue for operations like `print-log' (or `diff'
1357 (let ((visited (get-file-buffer file))) 1367 ;; between two revisions), so maybe this should be moved elsewhere.
1358 (when visited 1368 (save-some-buffers
1359 (if (vc-dispatcher-browsing) 1369 nil (lambda () (vc-dispatcher-in-fileset-p fileset)))
1360 (switch-to-buffer-other-window visited)
1361 (set-buffer visited))
1362 ;; Check relation of buffer and file, and make sure
1363 ;; user knows what he's doing. First, finding the file
1364 ;; will check whether the file on disk is newer.
1365 ;; Ignore buffer-read-only during this test, and
1366 ;; preserve find-file-literally.
1367 (let ((buffer-read-only (not (file-writable-p file))))
1368 (find-file-noselect file nil find-file-literally))
1369 (if (not (verify-visited-file-modtime (current-buffer)))
1370 (if (yes-or-no-p (format "Replace %s on disk with buffer contents? " file))
1371 (write-file buffer-file-name)
1372 (error "Aborted"))
1373 ;; Now, check if we have unsaved changes.
1374 (vc-buffer-sync t)
1375 (when (buffer-modified-p)
1376 (or (y-or-n-p (message "Use %s on disk, keeping modified buffer? " file))
1377 (error "Aborted")))))))
1378 files)) 1370 files))
1379 1371
1380;; arch-tag: 7d08b17f-5470-4799-914b-bfb9fcf6a246 1372;; arch-tag: 7d08b17f-5470-4799-914b-bfb9fcf6a246