exthelper: reintroduce the ability to register revsets
I think this is what Yuya and Boris agreed on.[1] This happens *after* the
extsetup phase now (and after the _aftercallback notifications). But this is
trivial, mergeable between exthelper instances, and doesn't need to have the
extension name supplied when registering.
The test needed updating so that extsetup() takes a `ui` argument, as exthelper
isn't trying to be backward compatible with 1.3.1.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2018-December/125888.html
--- a/mercurial/exthelper.py Sun Dec 23 23:01:51 2018 -0500
+++ b/mercurial/exthelper.py Thu Dec 27 21:26:17 2018 -0500
@@ -40,12 +40,14 @@
self.command = registrar.command(self.cmdtable)
self.configtable = {}
self.configitem = registrar.configitem(self.configtable)
+ self.revsetpredicate = registrar.revsetpredicate()
def merge(self, other):
self._uicallables.extend(other._uicallables)
self._uipopulatecallables.extend(other._uipopulatecallables)
self._extcallables.extend(other._extcallables)
self._repocallables.extend(other._repocallables)
+ self.revsetpredicate._table.update(other.revsetpredicate._table)
self._commandwrappers.extend(other._commandwrappers)
self._extcommandwrappers.extend(other._extcommandwrappers)
self._functionwrappers.extend(other._functionwrappers)
--- a/tests/test-extension.t Sun Dec 23 23:01:51 2018 -0500
+++ b/tests/test-extension.t Thu Dec 27 21:26:17 2018 -0500
@@ -151,25 +151,35 @@
$ cat > foo.py <<EOF
> from __future__ import print_function
> import os
+ > from mercurial import exthelper
> name = os.path.basename(__file__).rsplit('.', 1)[0]
> print("1) %s imported" % name, flush=True)
- > def uisetup(ui):
+ > eh = exthelper.exthelper()
+ > @eh.uisetup
+ > def _uisetup(ui):
> print("2) %s uisetup" % name, flush=True)
- > def extsetup():
+ > @eh.extsetup
+ > def _extsetup(ui):
> print("3) %s extsetup" % name, flush=True)
- > def uipopulate(ui):
+ > @eh.uipopulate
+ > def _uipopulate(ui):
> print("4) %s uipopulate" % name, flush=True)
- > def reposetup(ui, repo):
+ > @eh.reposetup
+ > def _reposetup(ui, repo):
> print("5) %s reposetup" % name, flush=True)
>
+ > extsetup = eh.finalextsetup
+ > reposetup = eh.finalreposetup
+ > uipopulate = eh.finaluipopulate
+ > uisetup = eh.finaluisetup
+ > revsetpredicate = eh.revsetpredicate
+ >
> bytesname = name.encode('utf-8')
> # custom predicate to check registration of functions at loading
> from mercurial import (
- > registrar,
> smartset,
> )
- > revsetpredicate = registrar.revsetpredicate()
- > @revsetpredicate(bytesname, safe=True) # safe=True for query via hgweb
+ > @eh.revsetpredicate(bytesname, safe=True) # safe=True for query via hgweb
> def custompredicate(repo, subset, x):
> return smartset.baseset([r for r in subset if r in {0}])
> EOF