revset: use revsymbol() for checking if a symbol is valid
Differential Revision: https://phab.mercurial-scm.org/D3078
--- a/mercurial/debugcommands.py Tue Apr 03 15:08:14 2018 -0700
+++ b/mercurial/debugcommands.py Sun Apr 01 22:48:32 2018 -0700
@@ -2210,7 +2210,7 @@
treebystage = {}
printedtree = None
- tree = revsetlang.parse(expr, lookup=repo.__contains__)
+ tree = revsetlang.parse(expr, lookup=revset.lookupfn(repo))
for n, f in stages:
treebystage[n] = tree = f(tree)
if n in showalways or (n in showchanged and tree != printedtree):
--- a/mercurial/revset.py Tue Apr 03 15:08:14 2018 -0700
+++ b/mercurial/revset.py Sun Apr 01 22:48:32 2018 -0700
@@ -2170,6 +2170,9 @@
# hook for extensions to execute code on the optimized tree
pass
+def lookupfn(repo):
+ return lambda symbol: scmutil.isrevsymbol(repo, symbol)
+
def match(ui, spec, repo=None):
"""Create a matcher for a single revision spec"""
return matchany(ui, [spec], repo=repo)
@@ -2189,7 +2192,7 @@
raise error.ParseError(_("empty query"))
lookup = None
if repo:
- lookup = repo.__contains__
+ lookup = lookupfn(repo)
if len(specs) == 1:
tree = revsetlang.parse(specs[0], lookup)
else:
--- a/mercurial/scmutil.py Tue Apr 03 15:08:14 2018 -0700
+++ b/mercurial/scmutil.py Sun Apr 01 22:48:32 2018 -0700
@@ -433,6 +433,13 @@
hexfunc = short
return '%d:%s' % (rev, hexfunc(node))
+def isrevsymbol(repo, symbol):
+ try:
+ revsymbol(repo, symbol)
+ return True
+ except error.RepoLookupError:
+ return False
+
def revsymbol(repo, symbol):
"""Returns a context given a single revision symbol (as string).
--- a/tests/test-revset.t Tue Apr 03 15:08:14 2018 -0700
+++ b/tests/test-revset.t Sun Apr 01 22:48:32 2018 -0700
@@ -54,7 +54,7 @@
> args = map(nodemod.bin, args)
> expr = revsetlang.formatspec(fmt, list(args))
> if ui.verbose:
- > tree = revsetlang.parse(expr, lookup=repo.__contains__)
+ > tree = revsetlang.parse(expr, lookup=revset.lookupfn(repo))
> ui.note(revsetlang.prettyformat(tree), b"\n")
> if opts["optimize"]:
> opttree = revsetlang.optimize(revsetlang.analyze(tree))