# HG changeset patch # User Nicolas Dumazet # Date 2010-11-10 17:10:37 # Node ID 7916a84c0758327267f03933145dfbf84d7c0f6a # Parent 15390d1a3cfcc502da250145849f7ca17fdfabca 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. diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -1180,11 +1180,20 @@ def walkchangerevs(repo, match, opts, pr # 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) diff --git a/tests/test-log.t b/tests/test-log.t --- a/tests/test-log.t +++ b/tests/test-log.t @@ -1020,6 +1020,15 @@ log -p -R repo 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 @@ Diff here should be the same: +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 +