diff options
author | Dan Nicolaescu <dann@ics.uci.edu> | 2007-11-12 03:56:38 +0000 |
---|---|---|
committer | Dan Nicolaescu <dann@ics.uci.edu> | 2007-11-12 03:56:38 +0000 |
commit | 2e7a8a21c95558e1e0236aaaea5bcb29a1e548d8 (patch) | |
tree | 524401762a86810aecd817571633b96914a4164d /lisp/vc-cvs.el | |
parent | 4cbf3aa72e398b35ab2f0f5272e1642737472d39 (diff) | |
download | emacs-2e7a8a21c95558e1e0236aaaea5bcb29a1e548d8.tar.gz emacs-2e7a8a21c95558e1e0236aaaea5bcb29a1e548d8.tar.bz2 emacs-2e7a8a21c95558e1e0236aaaea5bcb29a1e548d8.zip |
(vc-cvs-diff): If backup files exist, diff them
instead of doing "cvs diff" in order to avoid accessing the
repository.
Diffstat (limited to 'lisp/vc-cvs.el')
-rw-r--r-- | lisp/vc-cvs.el | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/lisp/vc-cvs.el b/lisp/vc-cvs.el index d6573db9df2..c9c50fceba2 100644 --- a/lisp/vc-cvs.el +++ b/lisp/vc-cvs.el @@ -513,15 +513,46 @@ The changes are between FIRST-REVISION and SECOND-REVISION." (defun vc-cvs-diff (files &optional oldvers newvers buffer) "Get a difference report using CVS between two revisions of FILE." - (let* ((async (and (not vc-disable-async-diff) - (vc-stay-local-p files))) - (status (apply 'vc-cvs-command (or buffer "*vc-diff*") + (let* ((async (and (not vc-disable-async-diff) + (vc-stay-local-p files))) + (invoke-cvs-diff-list nil) + status) + ;; Look through the file list and see if any files have backups + ;; that can be used to do a plain "diff" instead of "cvs diff". + (dolist (file files) + (let ((ov oldvers) + (nv newvers)) + (when (or (not ov) (string-equal ov "")) + (setq ov (vc-working-revision file))) + (when (string-equal nv "") + (setq nv nil)) + (let ((file-oldvers (vc-version-backup-file file ov)) + (file-newvers (if (not nv) + file + (vc-version-backup-file file nv))) + (coding-system-for-read (vc-coding-system-for-diff file))) + (if (and file-oldvers file-newvers) + (progn + (apply 'vc-do-command (or buffer "*vc-diff*") 1 "diff" nil + (append (if (listp diff-switches) + diff-switches + (list diff-switches)) + (if (listp vc-diff-switches) + vc-diff-switches + (list vc-diff-switches)) + (list (file-relative-name file-oldvers) + (file-relative-name file-newvers)))) + (setq status 0)) + (push file invoke-cvs-diff-list))))) + (when invoke-cvs-diff-list + (setq status (apply 'vc-cvs-command (or buffer "*vc-diff*") (if async 'async 1) - files "diff" + invoke-cvs-diff-list "diff" (and oldvers (concat "-r" oldvers)) (and newvers (concat "-r" newvers)) (vc-switches 'CVS 'diff)))) - (if async 1 status))) ; async diff, pessimistic assumption + (if async 1 status))) ; async diff, pessimistic assumption + (defun vc-cvs-diff-tree (dir &optional rev1 rev2) "Diff all files at and below DIR." |