changeset 40125:b2e4b1a5315a

(vc-cvs-diff-tree): New function.
author André Spiegel <spiegel@gnu.org>
date Sun, 21 Oct 2001 12:21:29 +0000
parents 9031427edfa3
children f51527f53712
files lisp/vc-cvs.el
diffstat 1 files changed, 25 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/vc-cvs.el	Sun Oct 21 12:15:22 2001 +0000
+++ b/lisp/vc-cvs.el	Sun Oct 21 12:21:29 2001 +0000
@@ -5,7 +5,7 @@
 ;; Author:      FSF (see vc.el for full credits)
 ;; Maintainer:  Andre Spiegel <spiegel@gnu.org>
 
-;; $Id: vc-cvs.el,v 1.23 2001/07/04 15:51:18 monnier Exp $
+;; $Id: vc-cvs.el,v 1.24 2001/08/28 17:06:36 spiegel Exp $
 
 ;; This file is part of GNU Emacs.
 
@@ -523,6 +523,30 @@
           1 ;; async diff, pessimistic assumption
         status))))
 
+(defun vc-cvs-diff-tree (dir &optional rev1 rev2)
+  "Diff all files at and below DIR."
+  (with-current-buffer "*vc-diff*"
+    (setq default-directory dir)
+    (if (vc-cvs-stay-local-p dir)
+        ;; local diff: do it filewise, and only for files that are modified
+        (vc-file-tree-walk
+         dir
+         (lambda (f)
+           (vc-exec-after
+            `(let ((coding-system-for-read (vc-coding-system-for-diff ',f)))
+               ;; possible optimization: fetch the state of all files
+               ;; in the tree via vc-cvs-dir-state-heuristic
+               (unless (vc-up-to-date-p ',f)
+                 (message "Looking at %s" ',f)
+                 (vc-diff-internal ',f ',rel1 ',rel2))))))
+      ;; cvs diff: use a single call for the entire tree
+      (let ((coding-system-for-read
+             (or coding-system-for-read 'undecided)))
+        (apply 'vc-do-command "*vc-diff*" 1 "cvs" nil "diff"
+               (and rel1 (concat "-r" rel1))
+               (and rel2 (concat "-r" rel2))
+               (vc-diff-switches-list cvs))))))
+
 (defun vc-cvs-annotate-command (file buffer &optional version)
   "Execute \"cvs annotate\" on FILE, inserting the contents in BUFFER.
 Optional arg VERSION is a version to annotate from."