##// END OF EJS Templates
extensions: load and configure extensions in well-defined phases...
extensions: load and configure extensions in well-defined phases Extensions are now loaded with a call-graph like this: dispatch._dispatch extensions.loadall extensions.load # add foo module to extensions._extensions extensions.load # add bar module to extensions._extensions foo.uisetup(ui) bar.uisetup(ui) foo.extsetup() bar.extsetup() commands.table.update(foo.cmdtable) commands.table.update(bar.cmdtable) hg.repository foo.reposetup(ui, repo) bar.reposetup(ui, repo) The uisetup calls could easily be moved out to dispatch._dispatch, but have been kept in extensions.loadall since at least TortoiseHg calls extensions.loadall and expects it to call uisetup. The extensions.load function called uisetup. It now has an unused ui argument which has been kept for backwards compatibility.

File last commit:

r9410:1c83938b default
r9410:1c83938b default
Show More
test-extension
141 lines | 2.9 KiB | text/plain | TextLexer
#!/bin/sh
# Test basic extension support
"$TESTDIR/hghave" no-outer-repo || exit 80
cat > foobar.py <<EOF
import os
from mercurial import commands
def uisetup(ui):
ui.write("uisetup called\\n")
def reposetup(ui, repo):
ui.write("reposetup called for %s\\n" % os.path.basename(repo.root))
ui.write("ui %s= repo.ui\\n" % (ui == repo.ui and "=" or "!"))
def foo(ui, *args, **kwargs):
ui.write("Foo\\n")
def bar(ui, *args, **kwargs):
ui.write("Bar\\n")
cmdtable = {
"foo": (foo, [], "hg foo"),
"bar": (bar, [], "hg bar"),
}
commands.norepo += ' bar'
EOF
abspath=`pwd`/foobar.py
mkdir barfoo
cp foobar.py barfoo/__init__.py
barfoopath=`pwd`/barfoo
hg init a
cd a
echo foo > file
hg add file
hg commit -m 'add file'
echo '[extensions]' >> $HGRCPATH
echo "foobar = $abspath" >> $HGRCPATH
hg foo
cd ..
hg clone a b
hg bar
echo 'foobar = !' >> $HGRCPATH
echo '% module/__init__.py-style'
echo "barfoo = $barfoopath" >> $HGRCPATH
cd a
hg foo
echo 'barfoo = !' >> $HGRCPATH
# check that extensions are loaded in phases
cat > foo.py <<EOF
import os
name = os.path.basename(__file__).rsplit('.', 1)[0]
print "1) %s imported" % name
def uisetup(ui):
print "2) %s uisetup" % name
def extsetup():
print "3) %s extsetup" % name
def reposetup(ui, repo):
print "4) %s reposetup" % name
EOF
cp foo.py bar.py
echo 'foo = foo.py' >> $HGRCPATH
echo 'bar = bar.py' >> $HGRCPATH
# command with no output, we just want to see the extensions loaded
hg paths
echo 'foo = !' >> $HGRCPATH
echo 'bar = !' >> $HGRCPATH
cd ..
cat > empty.py <<EOF
'''empty cmdtable
'''
cmdtable = {}
EOF
emptypath=`pwd`/empty.py
echo "empty = $emptypath" >> $HGRCPATH
hg help empty
echo 'empty = !' >> $HGRCPATH
cat > debugextension.py <<EOF
'''only debugcommands
'''
def debugfoobar(ui, repo, *args, **opts):
"yet another debug command"
pass
def foo(ui, repo, *args, **opts):
"""yet another foo command
This command has been DEPRECATED since forever.
"""
pass
cmdtable = {
"debugfoobar": (debugfoobar, (), "hg debugfoobar"),
"foo": (foo, (), "hg foo")
}
EOF
debugpath=`pwd`/debugextension.py
echo "debugextension = $debugpath" >> $HGRCPATH
echo "% hg help"
hg help debugextension
echo "% hg help --verbose"
hg --verbose help debugextension
echo "% hg help --debug"
hg --debug help debugextension
echo 'debugextension = !' >> $HGRCPATH
echo % issue811
debugpath=`pwd`/debugissue811.py
cat > debugissue811.py <<EOF
'''show all loaded extensions
'''
from mercurial import extensions, commands
def debugextensions(ui):
"yet another debug command"
ui.write("%s\n" % '\n'.join([x for x, y in extensions.extensions()]))
cmdtable = {"debugextensions": (debugextensions, (), "hg debugextensions")}
commands.norepo += " debugextensions"
EOF
echo "debugissue811 = $debugpath" >> $HGRCPATH
echo "mq=" >> $HGRCPATH
echo "hgext.mq=" >> $HGRCPATH
echo "hgext/mq=" >> $HGRCPATH
echo % show extensions
hg debugextensions