summaryrefslogtreecommitdiff
path: root/lisp/vc.el
diff options
context:
space:
mode:
authorAndré Spiegel <spiegel@gnu.org>2004-03-21 15:42:14 +0000
committerAndré Spiegel <spiegel@gnu.org>2004-03-21 15:42:14 +0000
commitac9ff2091ca29123d241e03c41fdc6f97f7c079d (patch)
tree92db4b6d19bb429f652e9a37a2ceaeacde5c0882 /lisp/vc.el
parent942269e7b4e1d4c0685ae0a09d9794f1b5b3609d (diff)
downloademacs-ac9ff2091ca29123d241e03c41fdc6f97f7c079d.tar.gz
Add new optional BUFFER argument to vc-BACKEND-print-log and
vc-BACKEND-diff. (vc-print-log): If the print-log implementation supports it, use the new BUFFER argument to direct output to *vc-change-log*, not *vc*. (vc-version-diff, vc-diff-internal): Doc fixes.
Diffstat (limited to 'lisp/vc.el')
-rw-r--r--lisp/vc.el57
1 files changed, 36 insertions, 21 deletions
diff --git a/lisp/vc.el b/lisp/vc.el
index b6953b157a4..943dba229b6 100644
--- a/lisp/vc.el
+++ b/lisp/vc.el
@@ -7,7 +7,7 @@
;; Maintainer: Andre Spiegel <spiegel@gnu.org>
;; Keywords: tools
-;; $Id: vc.el,v 1.367 2004/02/08 22:42:42 uid65629 Exp $
+;; $Id: vc.el,v 1.368 2004/03/15 03:55:24 monnier Exp $
;; This file is part of GNU Emacs.
@@ -264,9 +264,10 @@
;;
;; HISTORY FUNCTIONS
;;
-;; * print-log (file)
+;; * print-log (file &optional buffer)
;;
-;; Insert the revision log of FILE into the *vc* buffer.
+;; Insert the revision log of FILE into BUFFER, or the *vc* buffer
+;; if BUFFER is nil.
;;
;; - show-log-entry (version)
;;
@@ -301,17 +302,17 @@
;; default implementation runs rcs2log, which handles RCS- and
;; CVS-style logs.
;;
-;; * diff (file &optional rev1 rev2)
+;; * diff (file &optional rev1 rev2 buffer)
;;
-;; Insert the diff for FILE into the *vc-diff* buffer. If REV1 and
-;; REV2 are non-nil, report differences from REV1 to REV2. If REV1
-;; is nil, use the current workfile version (as found in the
-;; repository) as the older version; if REV2 is nil, use the current
-;; workfile contents as the newer version. This function should
-;; pass the value of (vc-switches BACKEND 'diff) to the backend
-;; command. It should return a status of either 0 (no differences
-;; found), or 1 (either non-empty diff or the diff is run
-;; asynchronously).
+;; Insert the diff for FILE into BUFFER, or the *vc-diff* buffer if
+;; BUFFER is nil. If REV1 and REV2 are non-nil, report differences
+;; from REV1 to REV2. If REV1 is nil, use the current workfile
+;; version (as found in the repository) as the older version; if
+;; REV2 is nil, use the current workfile contents as the newer
+;; version. This function should pass the value of (vc-switches
+;; BACKEND 'diff) to the backend command. It should return a status
+;; of either 0 (no differences found), or 1 (either non-empty diff
+;; or the diff is run asynchronously).
;;
;; - diff-tree (dir &optional rev1 rev2)
;;
@@ -1727,7 +1728,9 @@ versions of all registered files in or below it."
'diff-tree dir rel1 rel2))
(vc-exec-after `(let ((inhibit-read-only t))
(insert "\nEnd of diffs.\n"))))
- ;; single file diff
+ ;; Single file diff. It is important that the vc-controlled buffer
+ ;; is still current at this time, because any local settings in that
+ ;; buffer should affect the diff command.
(vc-diff-internal file rel1 rel2))
(set-buffer "*vc-diff*")
(if (and (zerop (buffer-size))
@@ -1752,8 +1755,8 @@ versions of all registered files in or below it."
(defun vc-diff-internal (file rel1 rel2)
"Run diff to compare FILE's revisions REL1 and REL2.
-Output goes to the current buffer, which is assumed properly set up.
-The exit status of the diff command is returned.
+Diff output goes to the *vc-diff* buffer. The exit status of the diff
+command is returned.
This function takes care to set up a proper coding system for diff output.
If both revisions are available as local files, then it also does not
@@ -2322,14 +2325,26 @@ allowed and simply skipped)."
;;;###autoload
(defun vc-print-log (&optional focus-rev)
- "List the change log of the current buffer in a window. If
-FOCUS-REV is non-nil, leave the point at that revision."
+ "List the change log of the current buffer in a window.
+If FOCUS-REV is non-nil, leave the point at that revision."
(interactive)
(vc-ensure-vc-buffer)
- (let ((file buffer-file-name))
+ (let* ((file buffer-file-name)
+ (print-log-args-length
+ (length (cadr (symbol-function
+ (vc-find-backend-function (vc-backend file)
+ 'print-log))))))
(or focus-rev (setq focus-rev (vc-workfile-version file)))
- (vc-call print-log file)
- (set-buffer "*vc*")
+ ;; Don't switch to the output buffer before running the command,
+ ;; so that any buffer-local settings in the vc-controlled
+ ;; buffer can be accessed by the command.
+ (if (> print-log-args-length 1)
+ (progn
+ (vc-call print-log file "*vc-change-log*")
+ (set-buffer "*vc-change-log*"))
+ ;; for backward compatibility
+ (vc-call print-log file)
+ (set-buffer "*vc*"))
(pop-to-buffer (current-buffer))
(log-view-mode)
(vc-exec-after