changeset 12972:7916a84c0758 stable

log: fix log -rREV FILE when REV isnt the last filerev (issue2492) Regression from 99cafcae25d9. That previous commit is not supposed to affect log calls without --follow, so we step out of this codepath if follow is not True, and it's enough to fix the regression. When --follow is given, we fix the issue by taking into account changesets that have a rev > maxrev to build the filegraph: even if those files are not included in the final result, it's still needed to walk correctly the graph from the end of the filelog to minrev, to track accurately renames.
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Thu, 11 Nov 2010 02:10:37 +0900
parents 15390d1a3cfc
children 6e0a9f9227bd 75e4fade4ad9
files mercurial/cmdutil.py tests/test-log.t
diffstat 2 files changed, 39 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/cmdutil.py	Thu Nov 11 02:05:02 2010 +0900
+++ b/mercurial/cmdutil.py	Thu Nov 11 02:10:37 2010 +0900
@@ -1180,11 +1180,20 @@
 
             # iterate from latest to oldest revision
             for rev, flparentlinkrevs, copied in filerevgen(filelog, last):
-                if rev > maxrev or rev not in ancestors:
-                    continue
-                # XXX insert 1327 fix here
-                if flparentlinkrevs:
-                    ancestors.update(flparentlinkrevs)
+                if not follow:
+                    if rev > maxrev:
+                        continue
+                else:
+                    # Note that last might not be the first interesting
+                    # rev to us:
+                    # if the file has been changed after maxrev, we'll
+                    # have linkrev(last) > maxrev, and we still need
+                    # to explore the file graph
+                    if rev not in ancestors:
+                        continue
+                    # XXX insert 1327 fix here
+                    if flparentlinkrevs:
+                        ancestors.update(flparentlinkrevs)
 
                 fncache.setdefault(rev, []).append(file_)
                 wanted.add(rev)
--- a/tests/test-log.t	Thu Nov 11 02:05:02 2010 +0900
+++ b/tests/test-log.t	Thu Nov 11 02:10:37 2010 +0900
@@ -1020,6 +1020,15 @@
   summary:     add foo, related
   
 
+Also check when maxrev < lastrevfilelog
+
+  $ hg --traceback log -f -r4 foo
+  changeset:   4:88176d361b69
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     add foo, related
+  
+
 Issue2383: hg log showing _less_ differences than hg diff
 
   $ hg init issue2383
@@ -1092,3 +1101,19 @@
   +b
   
   $ cd ..
+
+'hg log -r rev fn' when last(filelog(fn)) != rev
+
+  $ hg init simplelog; cd simplelog
+  $ echo f > a
+  $ hg ci -Am'a' -d '0 0'
+  adding a
+  $ echo f >> a
+  $ hg ci -Am'a bis' -d '1 0'
+
+  $ hg log -r0 a
+  changeset:   0:9f758d63dcde
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     a
+