revset: make follow() accept multiple startrevs
The diff might look slightly complicated, but the initial "c = repo['.']" was
effective if rev = None.
--- 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)
--- 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