##// END OF EJS Templates
revset: use delayregistrar to register predicate in extension easily...
FUJIWARA Katsunori -
r27586:42910f9f default
parent child Browse files
Show More
@@ -812,9 +812,11 b' def overridepull(orig, ui, repo, source='
812 812 ui.status(_("%d largefiles cached\n") % numcached)
813 813 return result
814 814
815 revsetpredicate = revset.extpredicate()
816
817 @revsetpredicate('pulled()')
815 818 def pulledrevsetsymbol(repo, subset, x):
816 """``pulled()``
817 Changesets that just has been pulled.
819 """Changesets that just has been pulled.
818 820
819 821 Only available with largefiles from pull --lfrev expressions.
820 822
@@ -9,7 +9,7 b''
9 9 '''setup for largefiles extension: uisetup'''
10 10
11 11 from mercurial import archival, cmdutil, commands, extensions, filemerge, hg, \
12 httppeer, merge, scmutil, sshpeer, wireproto, revset, subrepo, copies
12 httppeer, merge, scmutil, sshpeer, wireproto, subrepo, copies
13 13 from mercurial.i18n import _
14 14 from mercurial.hgweb import hgweb_mod, webcommands
15 15
@@ -83,7 +83,6 b' def uisetup(ui):'
83 83 ('', 'lfrev', [],
84 84 _('download largefiles for these revisions'), _('REV'))]
85 85 entry[1].extend(pullopt)
86 revset.symbols['pulled'] = overrides.pulledrevsetsymbol
87 86
88 87 entry = extensions.wrapcommand(commands.table, 'clone',
89 88 overrides.overrideclone)
@@ -170,3 +169,5 b' def uisetup(ui):'
170 169 if name == 'transplant':
171 170 extensions.wrapcommand(getattr(module, 'cmdtable'), 'transplant',
172 171 overrides.overridetransplant)
172
173 overrides.revsetpredicate.setup()
@@ -3558,9 +3558,11 b' def summaryhook(ui, repo):'
3558 3558 # i18n: column positioning for "hg summary"
3559 3559 ui.note(_("mq: (empty queue)\n"))
3560 3560
3561 revsetpredicate = revset.extpredicate()
3562
3563 @revsetpredicate('mq()')
3561 3564 def revsetmq(repo, subset, x):
3562 """``mq()``
3563 Changesets managed by MQ.
3565 """Changesets managed by MQ.
3564 3566 """
3565 3567 revset.getargs(x, 0, 0, _("mq takes no arguments"))
3566 3568 applied = set([repo[r.node].rev() for r in repo.mq.applied])
@@ -3596,7 +3598,7 b' def extsetup(ui):'
3596 3598 if extmodule.__file__ != __file__:
3597 3599 dotable(getattr(extmodule, 'cmdtable', {}))
3598 3600
3599 revset.symbols['mq'] = revsetmq
3601 revsetpredicate.setup()
3600 3602
3601 3603 colortable = {'qguard.negative': 'red',
3602 3604 'qguard.positive': 'yellow',
@@ -64,6 +64,9 b' def _destrebase(repo):'
64 64 branch = repo[None].branch()
65 65 return repo[branch].rev()
66 66
67 revsetpredicate = revset.extpredicate()
68
69 @revsetpredicate('_destrebase')
67 70 def _revsetdestrebase(repo, subset, x):
68 71 # ``_rebasedefaultdest()``
69 72
@@ -1238,4 +1241,4 b' def uisetup(ui):'
1238 1241 _("use 'hg rebase --continue' or 'hg rebase --abort'")])
1239 1242 # ensure rebased rev are not hidden
1240 1243 extensions.wrapfunction(repoview, '_getdynamicblockers', _rebasedvisible)
1241 revset.symbols['_destrebase'] = _revsetdestrebase
1244 revsetpredicate.setup()
@@ -693,9 +693,11 b' def _dotransplant(ui, repo, *revs, **opt'
693 693 if cleanupfn:
694 694 cleanupfn()
695 695
696 revsetpredicate = revset.extpredicate()
697
698 @revsetpredicate('transplanted([set])')
696 699 def revsettransplanted(repo, subset, x):
697 """``transplanted([set])``
698 Transplanted changesets in set, or all transplanted changesets.
700 """Transplanted changesets in set, or all transplanted changesets.
699 701 """
700 702 if x:
701 703 s = revset.getset(repo, subset, x)
@@ -711,7 +713,7 b' def kwtransplanted(repo, ctx, **args):'
711 713 return n and revlog.hex(n) or ''
712 714
713 715 def extsetup(ui):
714 revset.symbols['transplanted'] = revsettransplanted
716 revsetpredicate.setup()
715 717 templatekw.keywords['transplanted'] = kwtransplanted
716 718 cmdutil.unfinishedstates.append(
717 719 ['series', True, False, _('transplant in progress'),
@@ -487,11 +487,36 b' class predicate(registrar.funcregistrar)'
487 487
488 488 The first string argument of the constructor is used also in
489 489 online help.
490
491 Use 'extpredicate' instead of this to register revset predicate in
492 extensions.
490 493 """
491 494 table = symbols
492 495 formatdoc = "``%s``\n %s"
493 496 getname = registrar.funcregistrar.parsefuncdecl
494 497
498 class extpredicate(registrar.delayregistrar):
499 """Decorator to register revset predicate in extensions
500
501 Usage::
502
503 revsetpredicate = revset.extpredicate()
504
505 @revsetpredicate('mypredicate(arg1, arg2[, arg3])')
506 def mypredicatefunc(repo, subset, x):
507 '''Explanation of this revset predicate ....
508 '''
509 pass
510
511 def uisetup(ui):
512 revsetpredicate.setup()
513
514 'revsetpredicate' instance above can be used to decorate multiple
515 functions, and 'setup()' on it registers all such functions at
516 once.
517 """
518 registrar = predicate
519
495 520 @predicate('_destupdate')
496 521 def _destupdate(repo, subset, x):
497 522 # experimental revset for update destination
@@ -2189,3 +2189,43 b' test error message of bad revset'
2189 2189 [255]
2190 2190
2191 2191 $ cd ..
2192
2193 Test registrar.delayregistrar via revset.extpredicate
2194
2195 'extpredicate' decorator shouldn't register any functions until
2196 'setup()' on it.
2197
2198 $ cd repo
2199
2200 $ cat <<EOF > $TESTTMP/custompredicate.py
2201 > from mercurial import revset
2202 >
2203 > revsetpredicate = revset.extpredicate()
2204 >
2205 > @revsetpredicate('custom1()')
2206 > def custom1(repo, subset, x):
2207 > return revset.baseset([1])
2208 > @revsetpredicate('custom2()')
2209 > def custom2(repo, subset, x):
2210 > return revset.baseset([2])
2211 >
2212 > def uisetup(ui):
2213 > if ui.configbool('custompredicate', 'enabled'):
2214 > revsetpredicate.setup()
2215 > EOF
2216 $ cat <<EOF > .hg/hgrc
2217 > [extensions]
2218 > custompredicate = $TESTTMP/custompredicate.py
2219 > EOF
2220
2221 $ hg debugrevspec "custom1()"
2222 hg: parse error: unknown identifier: custom1
2223 [255]
2224 $ hg debugrevspec "custom2()"
2225 hg: parse error: unknown identifier: custom2
2226 [255]
2227 $ hg debugrevspec "custom1() or custom2()" --config custompredicate.enabled=true
2228 1
2229 2
2230
2231 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now