[PATCH 4 of 5 V2] revset: replace extpredicate by revsetpredicate of registrar
FUJIWARA Katsunori
foozy at lares.dti.ne.jp
Sat Jan 16 09:32:14 CST 2016
# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1452957858 -32400
# Sun Jan 17 00:24:18 2016 +0900
# Node ID 896a6ef9ae67667cc01bc8cbfc370acce74c7193
# Parent c201864f889dbb09b892efea726116bb156d0a4a
revset: replace extpredicate by revsetpredicate of registrar
This patch consists of changes below (these can't be applied
separately).
- replace revset.extpredicate by registrar.revsetpredicate in
extensions
- remove setup() on an instance named as revsetpredicate in
uisetup()/extsetup() of each extensions
registrar.revsetpredicate doesn't have setup() API.
- put new entry for revsetpredicate into extraloaders in dispatch
This causes implicit loading predicate functions at loading
extension.
This loading mechanism requires that an extension has an instance
named as revsetpredicate, and this is reason why
largefiles/__init__.py is also changed in this patch.
Before this patch, test-revset.t tests that all decorated revset
predicates are loaded by explicit setup() at once ("all or nothing").
Now, test-revset.t tests that any revset predicate isn't loaded at
failure of loading extension, because loading itself is executed by
dispatch and it can't be controlled on extension side.
diff --git a/hgext/largefiles/__init__.py b/hgext/largefiles/__init__.py
--- a/hgext/largefiles/__init__.py
+++ b/hgext/largefiles/__init__.py
@@ -111,6 +111,7 @@ import lfcommands
import proto
import reposetup
import uisetup as uisetupmod
+import overrides
# Note for extension authors: ONLY specify testedwith = 'internal' for
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
@@ -130,3 +131,4 @@ def uisetup(ui):
uisetupmod.uisetup(ui)
cmdtable = lfcommands.cmdtable
+revsetpredicate = overrides.revsetpredicate
diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -12,7 +12,7 @@ import os
import copy
from mercurial import hg, util, cmdutil, scmutil, match as match_, \
- archival, pathutil, revset, error
+ archival, pathutil, registrar, revset, error
from mercurial.i18n import _
import lfutil
@@ -802,7 +802,7 @@ def overridepull(orig, ui, repo, source=
ui.status(_("%d largefiles cached\n") % numcached)
return result
-revsetpredicate = revset.extpredicate()
+revsetpredicate = registrar.revsetpredicate()
@revsetpredicate('pulled()')
def pulledrevsetsymbol(repo, subset, x):
diff --git a/hgext/largefiles/uisetup.py b/hgext/largefiles/uisetup.py
--- a/hgext/largefiles/uisetup.py
+++ b/hgext/largefiles/uisetup.py
@@ -169,5 +169,3 @@ def uisetup(ui):
if name == 'transplant':
extensions.wrapcommand(getattr(module, 'cmdtable'), 'transplant',
overrides.overridetransplant)
-
- overrides.revsetpredicate.setup()
diff --git a/hgext/mq.py b/hgext/mq.py
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -70,6 +70,7 @@ from mercurial import extensions, error,
from mercurial import patch as patchmod
from mercurial import localrepo
from mercurial import subrepo
+from mercurial import registrar
import os, re, errno, shutil
seriesopts = [('s', 'summary', None, _('print first line of patch header'))]
@@ -3518,7 +3519,7 @@ def summaryhook(ui, repo):
# i18n: column positioning for "hg summary"
ui.note(_("mq: (empty queue)\n"))
-revsetpredicate = revset.extpredicate()
+revsetpredicate = registrar.revsetpredicate()
@revsetpredicate('mq()')
def revsetmq(repo, subset, x):
@@ -3558,8 +3559,6 @@ def extsetup(ui):
if extmodule.__file__ != __file__:
dotable(getattr(extmodule, 'cmdtable', {}))
- revsetpredicate.setup()
-
colortable = {'qguard.negative': 'red',
'qguard.positive': 'yellow',
'qguard.unguarded': 'green',
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -16,7 +16,7 @@ https://mercurial-scm.org/wiki/RebaseExt
from mercurial import hg, util, repair, merge, cmdutil, commands, bookmarks
from mercurial import extensions, patch, scmutil, phases, obsolete, error
-from mercurial import copies, repoview, revset
+from mercurial import copies, repoview, registrar, revset
from mercurial.commands import templateopts
from mercurial.node import nullrev, nullid, hex, short
from mercurial.lock import release
@@ -64,7 +64,7 @@ def _destrebase(repo):
branch = repo[None].branch()
return repo[branch].rev()
-revsetpredicate = revset.extpredicate()
+revsetpredicate = registrar.revsetpredicate()
@revsetpredicate('_destrebase')
def _revsetdestrebase(repo, subset, x):
@@ -1241,4 +1241,3 @@ def uisetup(ui):
['rebasestate', _('hg rebase --continue')])
# ensure rebased rev are not hidden
extensions.wrapfunction(repoview, '_getdynamicblockers', _rebasedvisible)
- revsetpredicate.setup()
diff --git a/hgext/transplant.py b/hgext/transplant.py
--- a/hgext/transplant.py
+++ b/hgext/transplant.py
@@ -19,7 +19,7 @@ import os, tempfile
from mercurial.node import short
from mercurial import bundlerepo, hg, merge, match
from mercurial import patch, revlog, scmutil, util, error, cmdutil
-from mercurial import revset, templatekw, exchange
+from mercurial import registrar, revset, templatekw, exchange
class TransplantError(error.Abort):
pass
@@ -694,7 +694,7 @@ def _dotransplant(ui, repo, *revs, **opt
if cleanupfn:
cleanupfn()
-revsetpredicate = revset.extpredicate()
+revsetpredicate = registrar.revsetpredicate()
@revsetpredicate('transplanted([set])')
def revsettransplanted(repo, subset, x):
@@ -714,7 +714,6 @@ def kwtransplanted(repo, ctx, **args):
return n and revlog.hex(n) or ''
def extsetup(ui):
- revsetpredicate.setup()
templatekw.keywords['transplanted'] = kwtransplanted
cmdutil.unfinishedstates.append(
['transplant/journal', True, False, _('transplant in progress'),
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -33,6 +33,7 @@ from . import (
fancyopts,
hg,
hook,
+ revset,
ui as uimod,
util,
)
@@ -768,6 +769,7 @@ def _checkshellalias(lui, ui, args, prec
# extraobj) arguments
extraloaders = [
('cmdtable', commands, 'loadcmdtable'),
+ ('revsetpredicate', revset, 'loadpredicate'),
]
def _dispatch(req):
diff --git a/tests/test-revset.t b/tests/test-revset.t
--- a/tests/test-revset.t
+++ b/tests/test-revset.t
@@ -2190,28 +2190,21 @@ test error message of bad revset
$ cd ..
-Test registrar.delayregistrar via revset.extpredicate
-
-'extpredicate' decorator shouldn't register any functions until
-'setup()' on it.
+Test that revset predicate of extension isn't loaded at failure of
+loading it
$ cd repo
$ cat <<EOF > $TESTTMP/custompredicate.py
- > from mercurial import revset
+ > from mercurial import error, registrar, revset
>
- > revsetpredicate = revset.extpredicate()
+ > revsetpredicate = registrar.revsetpredicate()
>
> @revsetpredicate('custom1()')
> def custom1(repo, subset, x):
> return revset.baseset([1])
- > @revsetpredicate('custom2()')
- > def custom2(repo, subset, x):
- > return revset.baseset([2])
>
- > def uisetup(ui):
- > if ui.configbool('custompredicate', 'enabled'):
- > revsetpredicate.setup()
+ > raise error.Abort('intentional failure of loading extension')
> EOF
$ cat <<EOF > .hg/hgrc
> [extensions]
@@ -2219,13 +2212,8 @@ Test registrar.delayregistrar via revset
> EOF
$ hg debugrevspec "custom1()"
+ *** failed to import extension custompredicate from $TESTTMP/custompredicate.py: intentional failure of loading extension
hg: parse error: unknown identifier: custom1
[255]
- $ hg debugrevspec "custom2()"
- hg: parse error: unknown identifier: custom2
- [255]
- $ hg debugrevspec "custom1() or custom2()" --config custompredicate.enabled=true
- 1
- 2
$ cd ..
More information about the Mercurial-devel
mailing list