GNU bug report logs - #14989
24.3.50; log-view-diff and log-view-diff-changeset default to different `to' revisions for git merge commits

Previous Next

Package: emacs;

Reported by: Dmitry Gutov <dgutov <at> yandex.ru>

Date: Tue, 30 Jul 2013 22:44:01 UTC

Severity: normal

Found in version 24.3.50

Done: Dmitry Gutov <dgutov <at> yandex.ru>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#14989: closed (24.3.50; log-view-diff and log-view-diff-changeset
 default to different `to' revisions for git merge commits)
Date: Wed, 31 Jul 2013 12:28:03 +0000
[Message part 1 (text/plain, inline)]
Your message dated Wed, 31 Jul 2013 15:26:45 +0300
with message-id <51F90285.9050702 <at> yandex.ru>
and subject line Re: bug#14989: 24.3.50; log-view-diff and log-view-diff-changeset default to different `to' revisions for git merge commits
has caused the debbugs.gnu.org bug report #14989,
regarding 24.3.50; log-view-diff and log-view-diff-changeset default to different `to' revisions for git merge commits
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)


-- 
14989: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14989
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Dmitry Gutov <dgutov <at> yandex.ru>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.3.50;
 log-view-diff and log-view-diff-changeset default to different `to'
 revisions for git merge commits
Date: Wed, 31 Jul 2013 01:42:57 +0300
To reproduce:

Have a merge commit where the second branch (merged from) has a newer
last commit than the first branch (merged to).

`vc-print-root-log' buffer would look like this:

*  (HEAD, devel)b044fba..: Some Guy 2013-07-25 foo foo
*   2152d76..: Dmitry Gutov 2013-07-25 Merge branch 'bar' into devel
|\
| *  (bar)1554943..: Another Guy 2013-07-25 Abc
| * f92770a..: Another Guy 2013-07-25 Def
* | 5f5c068..: Another Guy 2013-07-25 Ghi

If I move to commit 2152d76 and press `d', it will show the diff against
1554943. If I press `D', if will show the diff against 5f5c068, which is
*the* parent commit, as far as Git is concerned (the first parent, to be
more exact), because it belongs to the branch `devel', and the merge was
done from `bar' to `devel'.

Since this is a `vc-print-root-log' buffer, both commands will show the
full changesets, not just changes in an individual file.

But the behavior in `vc-print-log' is the same in this respect, except
the diff `d' shows is just for the current file.

`log-view-diff' behavior makes certain amount of sense (it always diffs
against the revision on the line below), but it's inconsistent with
`log-view-diff-changeset', and it also backfires when the current commit
is not a child of the commit on the previous line. Example: f92770a and
5f5c068. As a result, we get a meaningless diff.

This fix is simple enough. Apply?

=== modified file 'lisp/vc/log-view.el'
--- lisp/vc/log-view.el 2013-06-11 06:36:06 +0000
+++ lisp/vc/log-view.el 2013-07-30 22:31:40 +0000
@@ -565,10 +565,7 @@
   (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))))
+      (setq to (vc-call-backend log-view-vc-backend 'previous-revision nil fr)))
     (vc-diff-internal
      t (list log-view-vc-backend
             (if log-view-per-file-logs

The functions could also use some further cleanup:
1) Swap the `to' and `fr' local variables.
2) Extract the function bodies to one function with a third argument
(called `whole-changeset', maybe), and make them call it.

Objections?


[Message part 3 (message/rfc822, inline)]
From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 14989-done <at> debbugs.gnu.org
Subject: Re: bug#14989: 24.3.50; log-view-diff and log-view-diff-changeset
 default to different `to' revisions for git merge commits
Date: Wed, 31 Jul 2013 15:26:45 +0300
Done!

On 31.07.2013 04:38, Stefan Monnier wrote:
>> This fix is simple enough. Apply?
>
> Looks good, thanks.
>
>> The functions could also use some further cleanup:
>> 1) Swap the `to' and `fr' local variables.
>
> I think that would make sense, yes.
>
>> 2) Extract the function bodies to one function with a third argument
>> (called `whole-changeset', maybe), and make them call it.
>
> If that can be done without too much extra code, that sounds good.



This bug report was last modified 12 years and 16 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.