# HG changeset patch # User Jordi GutiƩrrez Hermoso # Date 2015-05-03 16:28:15 # Node ID 0222821526327cc3749523c79ef4cfd89e60789b # Parent c5d4f9cc8da7bb2068457e96e4f74ff694514ced revset: don't error out if tokens parse as existing symbols It makes perfect sense for tokens to parse as existing revset symbols (revset functions), and doesn't break anything, since parsing symbols as functions works correctly in the presence of parens. For example, if "only" is a bookmark, this used to error out, hg log -r "only(only, @)" which shouldn't, as the inner "only" is unambiguously not a function. So we just remove the symbolset function and replace its calling site with the stringset function. For the tests, we confirm that "date" and "only" are both parsed as revision names both inside revset expressions (e.g. an expression containing ::) and inside old-style revision expressions (e.g. those containing the name of the revision alone). diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -334,11 +334,6 @@ def stringset(repo, subset, x): return baseset([x]) return baseset() -def symbolset(repo, subset, x): - if x in symbols: - raise error.ParseError(_("can't use %s here") % x) - return stringset(repo, subset, x) - def rangeset(repo, subset, x, y): m = getset(repo, fullreposet(repo), x) n = getset(repo, fullreposet(repo), y) @@ -2088,7 +2083,7 @@ methods = { "range": rangeset, "dagrange": dagrange, "string": stringset, - "symbol": symbolset, + "symbol": stringset, "and": andset, "or": orset, "not": notset, diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -281,7 +281,7 @@ quoting needed hg: parse error: date requires a string [255] $ log 'date' - hg: parse error: can't use date here + abort: unknown revision 'date'! [255] $ log 'date(' hg: parse error at 5: not a prefix: end @@ -289,11 +289,40 @@ quoting needed $ log 'date(tip)' abort: invalid date: 'tip' [255] - $ log '"date"' + $ log '0:date' + abort: unknown revision 'date'! + [255] + $ log '::"date"' abort: unknown revision 'date'! [255] + $ hg book date -r 4 + $ log '0:date' + 0 + 1 + 2 + 3 + 4 + $ log '::date' + 0 + 1 + 2 + 4 + $ log '::"date"' + 0 + 1 + 2 + 4 $ log 'date(2005) and 1::' 4 + $ hg book -d date + +Test that symbols only get parsed as functions if there's an opening +parenthesis. + + $ hg book only -r 9 + $ log 'only(only)' # Outer "only" is a function, inner "only" is the bookmark + 8 + 9 ancestor can accept 0 or more arguments