emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/log-view.el,v


From: Dan Nicolaescu
Subject: [Emacs-diffs] Changes to emacs/lisp/log-view.el,v
Date: Sun, 15 Jun 2008 14:58:27 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Dan Nicolaescu <dann>   08/06/15 14:58:25

Index: lisp/log-view.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/log-view.el,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- lisp/log-view.el    6 May 2008 07:57:43 -0000       1.53
+++ lisp/log-view.el    15 Jun 2008 14:58:19 -0000      1.54
@@ -128,6 +128,7 @@
     ("m" . log-view-toggle-mark-entry)
     ("e" . log-view-modify-change-comment)
     ("d" . log-view-diff)
+    ("D" . log-view-diff-changeset)
     ("a" . log-view-annotate-version)
     ("f" . log-view-find-revision)
     ("n" . log-view-msg-next)
@@ -154,6 +155,8 @@
      :help ""]
     ["Diff Revisions"  log-view-diff
      :help "Get the diff between two revisions"]
+    ["Changeset Diff"  log-view-diff-changeset
+     :help "Get the changeset diff between two revisions"]
     ["Visit Version"  log-view-find-revision
      :help "Visit the version at point"]
     ["Annotate Version"  log-view-annotate-version
@@ -201,6 +204,9 @@
   "Regexp matching the text identifying the file.
 The match group number 1 should match the file name itself.")
 
+(defvar log-view-per-file-logs t
+  "Set if to t if the logs are shown one file at a time.")
+
 (defvar log-view-message-re
   (concat "^\\(?:revision \\(?1:[.0-9]+\\)\\(?:\t.*\\)?" ; RCS and CVS.
           "\\|r\\(?1:[0-9]+\\) | .* | .*"                ; Subversion.
@@ -229,6 +235,12 @@
 (defconst log-view-font-lock-defaults
   '(log-view-font-lock-keywords t nil nil nil))
 
+(defvar log-view-vc-fileset nil
+  "Set this to the fileset corresponding to the current log.")
+
+(defvar log-view-vc-backend nil
+  "Set this to the VC backend that created the current log.")
+
 ;;;;
 ;;;; Actual code
 ;;;;
@@ -415,9 +427,14 @@
 (defun log-view-find-revision (pos)
   "Visit the version at point."
   (interactive "d")
+  (unless log-view-per-file-logs
+    (when (> (length log-view-vc-fileset) 1)
+      (error "Multiple files shown in this buffer, cannot use this command 
here")))
   (save-excursion
     (goto-char pos)
-    (switch-to-buffer (vc-find-revision (log-view-current-file)
+    (switch-to-buffer (vc-find-revision (if log-view-per-file-logs
+                                           (log-view-current-file)
+                                         (car log-view-vc-fileset))
                                        (log-view-current-tag)))))
 
 
@@ -443,16 +460,23 @@
 (defun log-view-modify-change-comment ()
   "Edit the change comment displayed at point."
   (interactive)
-  (vc-modify-change-comment (list (log-view-current-file))
+  (vc-modify-change-comment (list (if log-view-per-file-logs
+                                     (log-view-current-file)
+                                   (car log-view-vc-fileset)))
                          (log-view-current-tag)
                          (log-view-extract-comment)))
 
 (defun log-view-annotate-version (pos)
   "Annotate the version at point."
   (interactive "d")
+  (unless log-view-per-file-logs
+    (when (> (length log-view-vc-fileset) 1)
+      (error "Multiple files shown in this buffer, cannot use this command 
here")))
   (save-excursion
     (goto-char pos)
-    (switch-to-buffer (vc-annotate (log-view-current-file)
+    (switch-to-buffer (vc-annotate (if log-view-per-file-logs
+                                      (log-view-current-file)
+                                    (car log-view-vc-fileset))
                                   (log-view-current-tag)))))
 
 ;;
@@ -475,7 +499,35 @@
         (goto-char end)
         (log-view-msg-next)
         (setq to (log-view-current-tag))))
-    (vc-version-diff (list (log-view-current-file)) to fr)))
+    (vc-version-diff
+     (if log-view-per-file-logs
+        (list (log-view-current-file))
+       log-view-vc-fileset)
+       to fr)))
+
+(defun log-view-diff-changeset (beg end)
+  "Get the diff between two revisions.
+If the mark is not active or the mark is on the revision at point,
+get the diff between the revision at point and its previous revision.
+Otherwise, get the diff between the revisions where the region starts
+and ends."
+  (interactive
+   (list (if mark-active (region-beginning) (point))
+         (if mark-active (region-end) (point))))
+  (when (eq (vc-call-backend log-view-vc-backend 'revision-granularity) 'file)
+    (error "The %s backend does not support changeset diffs" 
log-view-vc-backend))
+  (let ((fr (log-view-current-tag beg))
+        (to (log-view-current-tag end)))
+    (when (string-equal fr to)
+      ;; TO and FR are the same, look at the previous revision.
+      (setq to (vc-call-backend log-view-vc-backend 'previous-revision nil 
fr)))
+    (vc-diff-internal
+     t
+     ;; We want to see the diff for all the files in the changeset, so
+     ;; pass NIL for the file list.  The value passed here should
+     ;; follow what `vc-deduce-fileset' returns.
+     (list log-view-vc-backend nil)
+     to fr)))
 
 (provide 'log-view)
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]