Mercurial > public > mercurial-scm > hg
comparison mercurial/fileset.py @ 28448:7108834c76a2
fileset: replace predicate by filesetpredicate of registrar (API)
To make all built-in predicates be known to hggettext, loading
built-in predicates by loadpredicate() should be placed before fixing
i18nfunctions but after all of predicate decorating.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Fri, 11 Mar 2016 04:14:54 +0900 |
parents | 4eb5496c2bd4 |
children | d532ef155b0e |
comparison
equal
deleted
inserted
replaced
28447:4eb5496c2bd4 | 28448:7108834c76a2 |
---|---|
12 from .i18n import _ | 12 from .i18n import _ |
13 from . import ( | 13 from . import ( |
14 error, | 14 error, |
15 merge, | 15 merge, |
16 parser, | 16 parser, |
17 registrar, | |
17 util, | 18 util, |
18 ) | 19 ) |
19 | 20 |
20 elements = { | 21 elements = { |
21 # token-type: binding-strength, primary, prefix, infix, suffix | 22 # token-type: binding-strength, primary, prefix, infix, suffix |
142 _statuscallers = set() | 143 _statuscallers = set() |
143 | 144 |
144 # filesets using matchctx.existing() | 145 # filesets using matchctx.existing() |
145 _existingcallers = set() | 146 _existingcallers = set() |
146 | 147 |
147 def predicate(decl, callstatus=False, callexisting=False): | 148 predicate = registrar.filesetpredicate() |
148 """Return a decorator for fileset predicate function | |
149 | |
150 'decl' argument is the declaration (including argument list like | |
151 'adds(pattern)') or the name (for internal use only) of predicate. | |
152 | |
153 Optional 'callstatus' argument indicates whether predicate implies | |
154 'matchctx.status()' at runtime or not (False, by default). | |
155 | |
156 Optional 'callexisting' argument indicates whether predicate | |
157 implies 'matchctx.existing()' at runtime or not (False, by | |
158 default). | |
159 """ | |
160 def decorator(func): | |
161 i = decl.find('(') | |
162 if i > 0: | |
163 name = decl[:i] | |
164 else: | |
165 name = decl | |
166 symbols[name] = func | |
167 if callstatus: | |
168 _statuscallers.add(name) | |
169 if callexisting: | |
170 _existingcallers.add(name) | |
171 if func.__doc__: | |
172 func.__doc__ = "``%s``\n %s" % (decl, func.__doc__.strip()) | |
173 return func | |
174 return decorator | |
175 | 149 |
176 @predicate('modified()', callstatus=True) | 150 @predicate('modified()', callstatus=True) |
177 def modified(mctx, x): | 151 def modified(mctx, x): |
178 """File that is modified according to :hg:`status`. | 152 """File that is modified according to :hg:`status`. |
179 """ | 153 """ |
568 if func._callstatus: | 542 if func._callstatus: |
569 _statuscallers.add(name) | 543 _statuscallers.add(name) |
570 if func._callexisting: | 544 if func._callexisting: |
571 _existingcallers.add(name) | 545 _existingcallers.add(name) |
572 | 546 |
547 # load built-in predicates explicitly to setup _statuscallers/_existingcallers | |
548 loadpredicate(None, None, predicate) | |
549 | |
573 # tell hggettext to extract docstrings from these functions: | 550 # tell hggettext to extract docstrings from these functions: |
574 i18nfunctions = symbols.values() | 551 i18nfunctions = symbols.values() |