changeset 41066:0358cca1dccf

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
author Matt Harbison <matt_harbison@yahoo.com>
date Thu, 27 Dec 2018 21:26:17 -0500
parents 0840862977c8
children f2601cbce209
files mercurial/exthelper.py tests/test-extension.t
diffstat 2 files changed, 19 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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