@@ -218,6 +218,15 @@ def notset(repo, subset, x, order):
def relationset(repo, subset, x, y, order):
raise error.ParseError(_("can't use a relation in this context"))
+def generationsrel(repo, subset, x, rel, n, order):
+ # TODO: support range, rewrite tests, and drop startdepth argument
+ # from ancestors() and descendants() predicates
+ if n <= 0:
+ n = -n
+ return _ancestors(repo, subset, x, startdepth=n, stopdepth=n + 1)
+ else:
+ return _descendants(repo, subset, x, startdepth=n, stopdepth=n + 1)
+
def relsubscriptset(repo, subset, x, y, z, order):
# this is pretty basic implementation of 'x#y[z]' operator, still
# experimental so undocumented. see the wiki for further ideas.
@@ -225,17 +234,11 @@ def relsubscriptset(repo, subset, x, y,
rel = getsymbol(y)
n = getinteger(z, _("relation subscript must be an integer"))
- # TODO: perhaps this should be a table of relation functions
- if rel in ('g', 'generations'):
- # TODO: support range, rewrite tests, and drop startdepth argument
- # from ancestors() and descendants() predicates
- if n <= 0:
- n = -n
- return _ancestors(repo, subset, x, startdepth=n, stopdepth=n + 1)
- else:
- return _descendants(repo, subset, x, startdepth=n, stopdepth=n + 1)
+ if rel in subscriptrelations:
+ return subscriptrelations[rel](repo, subset, x, rel, n, order)
- raise error.UnknownIdentifier(rel, ['generations'])
+ relnames = (n for n in subscriptrelations.keys() if len(n) > 1)
+ raise error.UnknownIdentifier(rel, relnames)
def subscriptset(repo, subset, x, y, order):
raise error.ParseError(_("can't use a subscript in this context"))
@@ -2215,6 +2218,11 @@ methods = {
"parentpost": parentpost,
}
+subscriptrelations = {
+ "g": generationsrel,
+ "generations": generationsrel,
+}
+
def lookupfn(repo):
return lambda symbol: scmutil.isrevsymbol(repo, symbol)
@@ -649,6 +649,17 @@ parse errors of relation, subscript and
hg: parse error: relation subscript must be an integer
[255]
+suggested relations
+
+ $ hg debugrevspec '.#generafions[0]'
+ hg: parse error: unknown identifier: generafions
+ (did you mean generations?)
+ [255]
+
+ $ hg debugrevspec '.#f[0]'
+ hg: parse error: unknown identifier: f
+ [255]
+
parsed tree at stages:
$ hg debugrevspec -p all '()'