revset: add 'takeorder' attribute to mark functions that need ordering flag

Since most functions shouldn't need 'order' flag, it is passed only when
explicitly required. This avoids large API breakage.
This commit is contained in:
Yuya Nishihara 2016-08-07 17:58:50 +09:00
parent a8ff6aeb43
commit 7706430a92
2 changed files with 9 additions and 2 deletions

View File

@ -108,6 +108,9 @@ class revsetpredicate(_funcregistrarbase):
Optional argument 'safe' indicates whether a predicate is safe for
DoS attack (False by default).
Optional argument 'takeorder' indicates whether a predicate function
takes ordering policy as the last argument.
'revsetpredicate' instance in example above can be used to
decorate multiple functions.
@ -120,8 +123,9 @@ class revsetpredicate(_funcregistrarbase):
_getname = _funcregistrarbase._parsefuncdecl
_docformat = "``%s``\n %s"
def _extrasetup(self, name, func, safe=False):
def _extrasetup(self, name, func, safe=False, takeorder=False):
func._safe = safe
func._takeorder = takeorder
class filesetpredicate(_funcregistrarbase):
"""Decorator to register fileset predicate

View File

@ -422,7 +422,10 @@ def keyvaluepair(repo, subset, k, v):
def func(repo, subset, a, b, order):
f = getsymbol(a)
if f in symbols:
return symbols[f](repo, subset, b)
fn = symbols[f]
if getattr(fn, '_takeorder', False):
return fn(repo, subset, b, order)
return fn(repo, subset, b)
keep = lambda fn: getattr(fn, '__doc__', None) is not None