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.
#!/bin/sh
remove() {
hg rm $@
hg st
# do not use ls -R, which recurses in .hg subdirs on Mac OS X 10.5
find . -name .hg -prune -o -type f -print | sort
hg up -C
}
hg init a
cd a
echo a > foo
echo % file not managed
remove foo
hg add foo
hg commit -m1
# the table cases
echo % 00 state added, options none
echo b > bar
hg add bar
remove bar
echo % 01 state clean, options none
remove foo
echo % 02 state modified, options none
echo b >> foo
remove foo
echo % 03 state missing, options none
rm foo
remove foo
echo % 10 state added, options -f
echo b > bar
hg add bar
remove -f bar
rm bar
echo % 11 state clean, options -f
remove -f foo
echo % 12 state modified, options -f
echo b >> foo
remove -f foo
echo % 13 state missing, options -f
rm foo
remove -f foo
echo % 20 state added, options -A
echo b > bar
hg add bar
remove -A bar
echo % 21 state clean, options -A
remove -A foo
echo % 22 state modified, options -A
echo b >> foo
remove -A foo
echo % 23 state missing, options -A
rm foo
remove -A foo
echo % 30 state added, options -Af
echo b > bar
hg add bar
remove -Af bar
rm bar
echo % 31 state clean, options -Af
remove -Af foo
echo % 32 state modified, options -Af
echo b >> foo
remove -Af foo
echo % 33 state missing, options -Af
rm foo
remove -Af foo
# test some directory stuff
mkdir test
echo a > test/foo
echo b > test/bar
hg ci -Am2
echo % dir, options none
rm test/bar
remove test
echo % dir, options -f
rm test/bar
remove -f test
echo % dir, options -A
rm test/bar
remove -A test
echo % dir, options -Af
rm test/bar
remove -Af test