Mercurial > hg
changeset 31992:3e47a40d7a7a
context: possibly yield initial fctx in blockdescendants()
If initial 'fctx' has changes in line range with respect to its parents, we
yield it first. This makes 'followlines(..., descend=True)' consistent with
'descendants()' revset which yields the starting revision.
We reuse one iteration of blockancestors() which does exactly what we want.
In test-annotate.t, adjust 'startrev' in one case to cover the situation where
the starting revision does not touch specified line range.
author | Denis Laxalde <denis.laxalde@logilab.fr> |
---|---|
date | Fri, 14 Apr 2017 14:25:06 +0200 |
parents | 55987fc8aba1 |
children | bfb826c350d4 |
files | mercurial/context.py tests/test-annotate.t tests/test-hgweb-filelog.t |
diffstat | 3 files changed, 52 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Fri Apr 14 14:09:26 2017 +0200 +++ b/mercurial/context.py Fri Apr 14 14:25:06 2017 +0200 @@ -1212,6 +1212,16 @@ """Yield descendants of `fctx` with respect to the block of lines within `fromline`-`toline` range. """ + # First possibly yield 'fctx' if it has changes in range with respect to + # its parents. + try: + c, linerange1 = next(blockancestors(fctx, fromline, toline)) + except StopIteration: + pass + else: + if c == fctx: + yield c, linerange1 + diffopts = patch.diffopts(fctx._repo.ui) fl = fctx.filelog() seen = {fctx.filerev(): (fctx, (fromline, toline))}
--- a/tests/test-annotate.t Fri Apr 14 14:09:26 2017 +0200 +++ b/tests/test-annotate.t Fri Apr 14 14:25:06 2017 +0200 @@ -500,6 +500,7 @@ 16: baz:0 19: baz:3 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=True)' + 19: baz:3 20: baz:4 $ printf "0\n0\n" | cat - baz > baz1 $ mv baz1 baz @@ -509,6 +510,7 @@ 19: baz:3 20: baz:4 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, descend=True, startrev=19)' + 19: baz:3 20: baz:4 $ echo 6 >> baz $ hg ci -m 'added line 8' @@ -517,6 +519,7 @@ 19: baz:3 20: baz:4 $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=True)' + 19: baz:3 20: baz:4 $ sed 's/3/3+/' baz > baz.new $ mv baz.new baz @@ -526,7 +529,8 @@ 19: baz:3 20: baz:4 23: baz:3->3+ - $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=19, descend=True)' + $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 3:5, startrev=17, descend=True)' + 19: baz:3 20: baz:4 23: baz:3->3+ $ hg log -T '{rev}: {desc}\n' -r 'followlines(baz, 1:2)' @@ -617,9 +621,11 @@ |\ | o 19: baz:3 |/ - o 18: baz:2 - |\ - ~ ~ + o 18: baz:2 + : + o 16: baz:0 + | + ~ check error cases $ hg up 23 --quiet
--- a/tests/test-hgweb-filelog.t Fri Apr 14 14:09:26 2017 +0200 +++ b/tests/test-hgweb-filelog.t Fri Apr 14 14:25:06 2017 +0200 @@ -1502,6 +1502,29 @@ </html> $ hg log -r 'followlines(c, 3:4, startrev=8, descend=True) and follow(c)' -p + changeset: 8:5c6574614c37 + branch: a-branch + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: make c bigger and touch its beginning + + diff -r 46c1a66bd8fc -r 5c6574614c37 c + --- a/c Thu Jan 01 00:00:00 1970 +0000 + +++ b/c Thu Jan 01 00:00:00 1970 +0000 + @@ -1,2 +1,11 @@ + +0 + +0 + b + -c + +c+ + + + +a + +a + + + +d + +e + +f + changeset: 10:e95928d60479 branch: a-branch user: test @@ -1633,6 +1656,15 @@ <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td> <td class="author">test</td> <td class="description"> + <a href="/rev/5c6574614c37">make c bigger and touch its beginning</a> + <span class="branchname">a-branch</span> + </td> + </tr> + + <tr> + <td class="age">Thu, 01 Jan 1970 00:00:00 +0000</td> + <td class="author">test</td> + <td class="description"> <a href="/rev/e95928d60479">touch beginning of c</a> <span class="branchname">a-branch</span> </td>