From 2412ee1af63c6cc8f4a85919cc78e59cb6ec83e3 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Wed, 31 Jul 2013 15:22:10 +0300 Subject: [PATCH] * lisp/vc/log-view.el (log-view-diff): Extract `log-view-diff-common', use it. (log-view-diff-changeset): Same. (log-view-diff-common): Call backend command `previous-revision' to find out the previous revision, in both cases. Swap the variables `to' and `fr', so that `fr' usually refers to the earlier revision. Fixes: debbugs:14989 --- lisp/ChangeLog | 10 ++++++++++ lisp/vc/log-view.el | 43 ++++++++++++++++++++----------------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ed7e2d4ace..863f6b5a82 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2013-07-31 Dmitry Gutov + + * vc/log-view.el (log-view-diff): Extract `log-view-diff-common', + use it. + (log-view-diff-changeset): Same. + (log-view-diff-common): Call backend command `previous-revision' + to find out the previous revision, in both cases. Swap the + variables `to' and `fr', so that `fr' usually refers to the + earlier revision (Bug#14989). + 2013-07-31 Kan-Ru Chen * ibuf-ext.el (ibuffer-filter-by-filename): diff --git a/lisp/vc/log-view.el b/lisp/vc/log-view.el index de103c0cdb..be98586653 100644 --- a/lisp/vc/log-view.el +++ b/lisp/vc/log-view.el @@ -562,19 +562,7 @@ file(s)." (interactive (list (if (use-region-p) (region-beginning) (point)) (if (use-region-p) (region-end) (point)))) - (let ((fr (log-view-current-tag beg)) - (to (log-view-current-tag end))) - (when (string-equal fr to) - (save-excursion - (goto-char end) - (log-view-msg-next) - (setq to (log-view-current-tag)))) - (vc-diff-internal - t (list log-view-vc-backend - (if log-view-per-file-logs - (list (log-view-current-file)) - log-view-vc-fileset)) - to fr))) + (log-view-diff-common beg end)) (defun log-view-diff-changeset (beg end) "Get the diff between two revisions. @@ -589,20 +577,29 @@ considered file(s)." (interactive (list (if (use-region-p) (region-beginning) (point)) (if (use-region-p) (region-end) (point)))) - (when (eq (vc-call-backend log-view-vc-backend 'revision-granularity) 'file) + (log-view-diff-common beg end t)) + +(defun log-view-diff-common (beg end &optional whole-changeset) + (when (and whole-changeset + (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))) + (let ((to (log-view-current-tag beg)) + (fr (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))) + (setq fr (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))) + t (list log-view-vc-backend + ;; The value passed here should follow what + ;; `vc-deduce-fileset' returns. If we want to see the + ;; diff for all the files in the changeset, pass NIL for + ;; the file list. + (unless whole-changeset + (if log-view-per-file-logs + (list (log-view-current-file)) + log-view-vc-fileset))) + fr to))) (provide 'log-view) -- 2.20.1