diff mercurial/context.py @ 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 c84c83b5df0f
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))}