comparison mercurial/revset.py @ 28395:0383f7a5e86c

revset: replace predicate by revsetpredicate of registrar 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 Tue, 08 Mar 2016 23:04:53 +0900
parents ac11ba7c2e56
children 0d79d91ba7e3
comparison
equal deleted inserted replaced
28394:dcb4209bd30d 28395:0383f7a5e86c
480 # symbols which can't be used for a DoS attack for any given input 480 # symbols which can't be used for a DoS attack for any given input
481 # (e.g. those which accept regexes as plain strings shouldn't be included) 481 # (e.g. those which accept regexes as plain strings shouldn't be included)
482 # functions that just return a lot of changesets (like all) don't count here 482 # functions that just return a lot of changesets (like all) don't count here
483 safesymbols = set() 483 safesymbols = set()
484 484
485 class predicate(registrar.funcregistrar): 485 predicate = registrar.revsetpredicate()
486 """Decorator to register revset predicate
487
488 Usage::
489
490 @predicate('mypredicate(arg1, arg2[, arg3])')
491 def mypredicatefunc(repo, subset, x):
492 '''Explanation of this revset predicate ....
493 '''
494 pass
495
496 The first string argument of the constructor is used also in
497 online help.
498
499 Use 'extpredicate' instead of this to register revset predicate in
500 extensions.
501 """
502 table = symbols
503 formatdoc = "``%s``\n %s"
504 getname = registrar.funcregistrar.parsefuncdecl
505
506 def __init__(self, decl, safe=False):
507 """'safe' indicates whether a predicate is safe for DoS attack
508 """
509 super(predicate, self).__init__(decl)
510 self.safe = safe
511
512 def extraaction(self, name, func):
513 if self.safe:
514 safesymbols.add(name)
515 486
516 class extpredicate(registrar.delayregistrar): 487 class extpredicate(registrar.delayregistrar):
517 """Decorator to register revset predicate in extensions 488 """Decorator to register revset predicate in extensions
518 489
519 Usage:: 490 Usage::
3634 for name, func in registrarobj._table.iteritems(): 3605 for name, func in registrarobj._table.iteritems():
3635 symbols[name] = func 3606 symbols[name] = func
3636 if func._safe: 3607 if func._safe:
3637 safesymbols.add(name) 3608 safesymbols.add(name)
3638 3609
3610 # load built-in predicates explicitly to setup safesymbols
3611 loadpredicate(None, None, predicate)
3612
3639 # tell hggettext to extract docstrings from these functions: 3613 # tell hggettext to extract docstrings from these functions:
3640 i18nfunctions = symbols.values() 3614 i18nfunctions = symbols.values()