fileset: use set instead of list to mark predicates for efficiency (API)
This reduces cost of examining whether given predicate calls
'matchctx.status()' or 'matchctx.existing()' in 'getfileset()' at
runtime.
This kind of examination is used also in subsequent patch, which
detects unintentional 'matchctx.existing()' invocation per each
predicate evaluation.
--- a/mercurial/fileset.py Mon Dec 21 22:31:16 2015 +0900
+++ b/mercurial/fileset.py Mon Dec 21 22:31:16 2015 +0900
@@ -138,10 +138,10 @@
symbols = {}
# filesets using matchctx.status()
-_statuscallers = []
+_statuscallers = set()
# filesets using matchctx.existing()
-_existingcallers = []
+_existingcallers = set()
def predicate(decl, callstatus=False, callexisting=False):
"""Return a decorator for fileset predicate function
@@ -164,9 +164,9 @@
name = decl
symbols[name] = func
if callstatus:
- _statuscallers.append(name)
+ _statuscallers.add(name)
if callexisting:
- _existingcallers.append(name)
+ _existingcallers.add(name)
if func.__doc__:
func.__doc__ = "``%s``\n %s" % (decl, func.__doc__.strip())
return func