context: add an assertion checking linerange consistency in blockdescendants()
If this assertion fails, this indicates a flaw in the algorithm. So fail fast
instead of possibly producing wrong results.
Also extend the target line range in test to catch a merge changeset with all
its parents.
--- a/mercurial/context.py Fri Apr 14 12:34:26 2017 -0700
+++ b/mercurial/context.py Fri Apr 14 14:09:26 2017 +0200
@@ -1226,6 +1226,12 @@
continue
inrangep, linerange1 = _changesrange(c, p, linerange2, diffopts)
inrange = inrange or inrangep
+ # If revision 'i' has been seen (it's a merge), we assume that its
+ # line range is the same independently of which parents was used
+ # to compute it.
+ assert i not in seen or seen[i][1] == linerange1, (
+ 'computed line range for %s is not consistent between '
+ 'ancestor branches' % c)
seen[i] = c, linerange1
if inrange:
yield c, linerange1
--- a/tests/test-annotate.t Fri Apr 14 12:34:26 2017 -0700
+++ b/tests/test-annotate.t Fri Apr 14 14:09:26 2017 +0200
@@ -606,7 +606,7 @@
$ mv baz.new baz
$ hg ci -m 'baz:3->+3'
created new head
- $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=16, descend=True)' --graph
+ $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 2:5, startrev=16, descend=True)' --graph
@ 29: baz:3->+3
:
: o 26: baz:3+->3-
@@ -615,10 +615,11 @@
:/
o 20: baz:4
|\
- | ~
- o 19: baz:3
- |
- ~
+ | o 19: baz:3
+ |/
+ o 18: baz:2
+ |\
+ ~ ~
check error cases
$ hg up 23 --quiet