revset: add support of keyword arguments to ancestors() and descendants()
Prepares for adding depth parameter.
--- a/mercurial/revset.py Sun Jun 18 11:57:28 2017 +0900
+++ b/mercurial/revset.py Sun Jun 18 12:06:22 2017 +0900
@@ -250,7 +250,11 @@
"""Changesets that are ancestors of changesets in set, including the
given changesets themselves.
"""
- return _ancestors(repo, subset, x)
+ args = getargsdict(x, 'ancestors', 'set')
+ if 'set' not in args:
+ # i18n: "ancestors" is a keyword
+ raise error.ParseError(_('ancestors takes at least 1 argument'))
+ return _ancestors(repo, subset, args['set'])
@predicate('_firstancestors', safe=True)
def _firstancestors(repo, subset, x):
@@ -596,7 +600,11 @@
"""Changesets which are descendants of changesets in set, including the
given changesets themselves.
"""
- return _descendants(repo, subset, x)
+ args = getargsdict(x, 'descendants', 'set')
+ if 'set' not in args:
+ # i18n: "descendants" is a keyword
+ raise error.ParseError(_('descendants takes at least 1 argument'))
+ return _descendants(repo, subset, args['set'])
@predicate('_firstdescendants', safe=True)
def _firstdescendants(repo, subset, x):
--- a/tests/test-revset.t Sun Jun 18 11:57:28 2017 +0900
+++ b/tests/test-revset.t Sun Jun 18 12:06:22 2017 +0900
@@ -2996,8 +2996,7 @@
('symbol', '1'))
any)
define)
- hg: parse error: can't use a list in this context
- (see hg help "revsets.x or y")
+ hg: parse error: ancestors takes at most 1 positional arguments
[255]
$ hg debugrevspec -p optimized 'ancestors(6, 1) - ancestors(4)'
* optimized:
@@ -3013,8 +3012,7 @@
('symbol', '4')
any)
define)
- hg: parse error: can't use a list in this context
- (see hg help "revsets.x or y")
+ hg: parse error: ancestors takes at most 1 positional arguments
[255]
optimization disabled if keyword arguments passed (because we're too lazy
@@ -3036,8 +3034,9 @@
('symbol', '4'))
any)
define)
- hg: parse error: can't use a key-value pair in this context
- [255]
+ 3
+ 5
+ 6
invalid function call should not be optimized to only()