mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
91c6eab10f
Before a command is declared unknown, each extension in hgext is searched, starting with hgext.<cmdname>. If there's a matching command, a help message suggests the appropriate extension and how to enable it. Every extension could potentially be imported, but for cases like rebase, relink, etc. only one extension is imported. For the case of "hg help disabledext", if the extension is in hgext, the extension description is read and a similar help suggestion is printed. No extension import occurs.
180 lines
3.7 KiB
Bash
Executable File
180 lines
3.7 KiB
Bash
Executable File
#!/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
|
|
TMPPYTHONPATH="$PYTHONPATH"
|
|
PYTHONPATH="`pwd`:$PYTHONPATH"
|
|
export PYTHONPATH
|
|
hg help broken
|
|
hg help foo > /dev/null
|
|
PYTHONPATH="$TMPPYTHONPATH"
|
|
export PYTHONPATH
|
|
|
|
exit 0
|