# HG changeset patch # User Yuya Nishihara # Date 1474539086 -32400 # Node ID 921680c3e2ea4ce303bffaae17fcd704b216353d # Parent c9144396099b0c40e3b39779d1ed55abcd1e7de3 revset: make follow() accept multiple startrevs The diff might look slightly complicated, but the initial "c = repo['.']" was effective if rev = None. diff -r c9144396099b -r 921680c3e2ea mercurial/revset.py --- a/mercurial/revset.py Thu Sep 22 18:41:51 2016 +0900 +++ b/mercurial/revset.py Thu Sep 22 19:11:26 2016 +0900 @@ -914,20 +914,20 @@ c = repo['.'] if l: x = getstring(l[0], _("%s expected a pattern") % name) - rev = None + revs = [None] if len(l) >= 2: revs = getset(repo, fullreposet(repo), l[1]) - if len(revs) != 1: + if not revs: raise error.RepoLookupError( - _("%s expected one starting revision") % name) - rev = revs.last() - c = repo[rev] - matcher = matchmod.match(repo.root, repo.getcwd(), [x], - ctx=repo[rev], default='path') - - files = c.manifest().walk(matcher) - - fctxs = [c[f].introfilectx() for f in files] + _("%s expected at least one starting revision") % name) + fctxs = [] + for r in revs: + ctx = mctx = repo[r] + if r is None: + ctx = repo['.'] + m = matchmod.match(repo.root, repo.getcwd(), [x], + ctx=mctx, default='path') + fctxs.extend(ctx[f].introfilectx() for f in ctx.manifest().walk(m)) s = dagop.filerevancestors(fctxs, followfirst) else: s = dagop.revancestors(repo, baseset([c.rev()]), followfirst) diff -r c9144396099b -r 921680c3e2ea tests/test-log.t --- a/tests/test-log.t Thu Sep 22 18:41:51 2016 +0900 +++ b/tests/test-log.t Thu Sep 22 19:11:26 2016 +0900 @@ -732,6 +732,19 @@ date: Thu Jan 01 00:00:01 1970 +0000 summary: b2 + +follow files starting from multiple revisions: + + $ hg log -T '{rev}: {files}\n' -r "follow('glob:b?', 2+3+4)" + 3: b1 + 4: b2 + +follow files starting from empty revision: + + $ hg log -T '{rev}: {files}\n' -r "follow('glob:*', .-.)" + abort: follow expected at least one starting revision! + [255] + $ hg up -qC 4 log -f -r null