Mercurial > public > mercurial-scm > hg
comparison mercurial/revset.py @ 35300:d36eda8896cc
revset: alias follow(startrev=rev) to ancestors(rev)
This seems natural given 'log -frREV' (with no file pattern) is equivalent
to 'log -frREV *'.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 22 Sep 2016 19:40:07 +0900 |
parents | 89b5c2ae1980 |
children | d67bcfc0041f |
comparison
equal
deleted
inserted
replaced
35299:89b5c2ae1980 | 35300:d36eda8896cc |
---|---|
908 """ | 908 """ |
909 return limit(repo, subset, x, order) | 909 return limit(repo, subset, x, order) |
910 | 910 |
911 def _follow(repo, subset, x, name, followfirst=False): | 911 def _follow(repo, subset, x, name, followfirst=False): |
912 args = getargsdict(x, name, 'file startrev') | 912 args = getargsdict(x, name, 'file startrev') |
913 c = repo['.'] | 913 revs = None |
914 if 'startrev' in args: | |
915 revs = getset(repo, fullreposet(repo), args['startrev']) | |
916 if not revs: | |
917 raise error.RepoLookupError( | |
918 _("%s expected at least one starting revision") % name) | |
914 if 'file' in args: | 919 if 'file' in args: |
915 x = getstring(args['file'], _("%s expected a pattern") % name) | 920 x = getstring(args['file'], _("%s expected a pattern") % name) |
916 revs = [None] | 921 if revs is None: |
917 if 'startrev' in args: | 922 revs = [None] |
918 revs = getset(repo, fullreposet(repo), args['startrev']) | |
919 if not revs: | |
920 raise error.RepoLookupError( | |
921 _("%s expected at least one starting revision") % name) | |
922 fctxs = [] | 923 fctxs = [] |
923 for r in revs: | 924 for r in revs: |
924 ctx = mctx = repo[r] | 925 ctx = mctx = repo[r] |
925 if r is None: | 926 if r is None: |
926 ctx = repo['.'] | 927 ctx = repo['.'] |
927 m = matchmod.match(repo.root, repo.getcwd(), [x], | 928 m = matchmod.match(repo.root, repo.getcwd(), [x], |
928 ctx=mctx, default='path') | 929 ctx=mctx, default='path') |
929 fctxs.extend(ctx[f].introfilectx() for f in ctx.manifest().walk(m)) | 930 fctxs.extend(ctx[f].introfilectx() for f in ctx.manifest().walk(m)) |
930 s = dagop.filerevancestors(fctxs, followfirst) | 931 s = dagop.filerevancestors(fctxs, followfirst) |
931 else: | 932 else: |
932 if 'startrev' in args: | 933 if revs is None: |
933 raise error.ParseError(_("%s takes no arguments or a pattern " | 934 revs = baseset([repo['.'].rev()]) |
934 "and an optional revset") % name) | 935 s = dagop.revancestors(repo, revs, followfirst) |
935 s = dagop.revancestors(repo, baseset([c.rev()]), followfirst) | |
936 | 936 |
937 return subset & s | 937 return subset & s |
938 | 938 |
939 @predicate('follow([file[, startrev]])', safe=True) | 939 @predicate('follow([file[, startrev]])', safe=True) |
940 def follow(repo, subset, x): | 940 def follow(repo, subset, x): |