GNU bug report logs - #4642
diff from log-view somtime diffs the wrong file

Previous Next

Package: emacs;

Reported by: Dan Nicolaescu <dann <at> ics.uci.edu>

Date: Mon, 5 Oct 2009 12:55:04 UTC

Severity: normal

Done: Dan Nicolaescu <dann <at> ics.uci.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (Emacs bug Tracking System)
To: Dan Nicolaescu <dann <at> ics.uci.edu>
Subject: bug#4642 closed by Dan Nicolaescu <dann <at> ics.uci.edu> (Re:
 bug#4642: diff from log-view somtime diffs the wrong file)
Date: Mon, 05 Oct 2009 15:20:07 +0000
[Message part 1 (text/plain, inline)]
This is an automatic notification regarding your bug report
which was filed against the emacs package:

#4642: diff from log-view somtime diffs the wrong file

It has been closed by Dan Nicolaescu <dann <at> ics.uci.edu>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Dan Nicolaescu <dann <at> ics.uci.edu> by
replying to this email.


-- 
4642: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=4642
Emacs Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Dan Nicolaescu <dann <at> ics.uci.edu>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: 4642-done <at> debbugs.gnu.org
Subject: Re: bug#4642: diff from log-view somtime diffs the wrong file
Date: Mon, 5 Oct 2009 08:14:20 -0700 (PDT)
Stefan Monnier <monnier <at> iro.umontreal.ca> writes:

  > > One way to fix this is to make log-view-diff not call vc-version-diff,
  > > but vc-diff-internal, like so:
  > 
  > That looks OK.  

Thanks, checked in.

  > But we should also either fix vc-version-diff so it doesn't ignore
  > its `files' argument, or otherwise remove that argument

Can you please do that, it's unclear to me how to fix this.

  > (which will be a good opportunity to go and fix the other callers).

Luckily there's only 2 callers: vc-diff and vc-root-diff (which is
clearly marked as not working correctly with vc-version-diff...).

  > 
  >         Stefan
  > 
  > 
  > > --- log-view.el.~1.60.~    2009-10-03 03:20:50.000000000 -0700
  > > +++ log-view.el            2009-10-04 19:20:58.000000000 -0700
  > > @@ -496,11 +496,12 @@ changeset that affected the currently co
  > >          (goto-char end)
  > >          (log-view-msg-next)
  > >          (setq to (log-view-current-tag))))
  > > -    (vc-version-diff
  > > -     (if log-view-per-file-logs
  > > -      (list (log-view-current-file))
  > > -       log-view-vc-fileset)
  > > -       to fr)))
  > > +    (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)))
  >  
  > >  (declare-function vc-diff-internal "vc"
  > >                     (async vc-fileset rev1 rev2 &optional verbose))
  > 
  > > OK to check in?
[Message part 3 (message/rfc822, inline)]
From: Dan Nicolaescu <dann <at> ics.uci.edu>
To: bug-gnu-emacs <bug-gnu-emacs <at> gnu.org>
Subject: diff from log-view somtime diffs the wrong file
Date: Mon, 5 Oct 2009 05:43:57 -0700 (PDT)
emacs -Q

C-x v d SOME_DIRECTORY RET

say the above display 2 files a and b

put the cursor on a and do:

C-x v l

put the cursor on b and

switch to the *vc-change-log* buffer.

press d in that buffer

it will show a diff for the file "b", not "a" (or it will give an error
that the diff is not found).

log-view-diff calls vc-version-diff, which calls vc-diff-internal not
using it's arguments, but by calling `vc-deduce-fileset'.  That will
trigger this code in vc-deduce-fileset:

     ((and (buffer-live-p vc-parent-buffer)
           (or (buffer-file-name vc-parent-buffer)
             (with-current-buffer
                  vc-parent-buffer
                          (derived-mode-p 'vc-dir-mode))))


but the selected file in the vc-dir buffer has changed, and this will
return the new selected file, while log-view actually wants the old one.

One way to fix this is to make log-view-diff not call vc-version-diff,
but vc-diff-internal, like so:

--- log-view.el.~1.60.~    2009-10-03 03:20:50.000000000 -0700
+++ log-view.el            2009-10-04 19:20:58.000000000 -0700
@@ -496,11 +496,12 @@ changeset that affected the currently co
         (goto-char end)
         (log-view-msg-next)
         (setq to (log-view-current-tag))))
-    (vc-version-diff
-     (if log-view-per-file-logs
-      (list (log-view-current-file))
-       log-view-vc-fileset)
-       to fr)))
+    (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)))
 
 (declare-function vc-diff-internal "vc"
                    (async vc-fileset rev1 rev2 &optional verbose))

OK to check in?



This bug report was last modified 15 years and 315 days ago.

Previous Next


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