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):