diff -r 806f9a883b4f -r 826e600605f6 mercurial/context.py --- a/mercurial/context.py Thu Mar 09 22:40:52 2017 -0800 +++ b/mercurial/context.py Mon Apr 10 15:11:36 2017 +0200 @@ -1208,6 +1208,26 @@ if inrange: yield c, linerange2 +def blockdescendants(fctx, fromline, toline): + """Yield descendants of `fctx` with respect to the block of lines within + `fromline`-`toline` range. + """ + diffopts = patch.diffopts(fctx._repo.ui) + fl = fctx.filelog() + seen = {fctx.filerev(): (fctx, (fromline, toline))} + for i in fl.descendants([fctx.filerev()]): + c = fctx.filectx(i) + for x in fl.parentrevs(i): + try: + p, linerange2 = seen.pop(x) + except KeyError: + # nullrev or other branch + continue + inrange, linerange1 = _changesrange(c, p, linerange2, diffopts) + if inrange: + yield c, linerange1 + seen[i] = c, linerange1 + class committablectx(basectx): """A committablectx object provides common functionality for a context that wants the ability to commit, e.g. workingctx or memctx."""