# HG changeset patch # User FUJIWARA Katsunori # Date 1450704676 -32400 # Node ID a8afdc5a78850adce4b1944108b086e132bfb977 # Parent 470ea34ba593e8122d84d54b6f56ae8aae77e3de 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. diff -r 470ea34ba593 -r a8afdc5a7885 mercurial/fileset.py --- 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