#!/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
# check hgweb's load order
echo '% hgweb.cgi'
cat > hgweb.cgi <<EOF
#!/usr/bin/env python
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb
from mercurial.hgweb import wsgicgi
application = hgweb('.', 'test repo')
wsgicgi.launch(application)
EOF
SCRIPT_NAME='/' SERVER_PORT='80' SERVER_NAME='localhost' python hgweb.cgi \
| grep '^[0-9]) ' # ignores HTML output
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
echo '% disabled extension commands'
HGRCPATH=
hg help email
hg qdel
hg churn
echo '% disabled extensions'
hg help churn
hg help patchbomb
echo '% broken disabled extension and command'
mkdir hgext
echo > hgext/__init__.py
cat > hgext/broken.py <<EOF
"broken extension'
EOF
cat > path.py <<EOF
import os, sys
sys.path.insert(0, os.environ['HGEXTPATH'])
EOF
HGEXTPATH=`pwd`
export HGEXTPATH
hg --config extensions.path=./path.py help broken
hg --config extensions.path=./path.py help foo > /dev/null
exit 0