15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
# This module implements plug-in support.
19
# Any python module in $BZR_PLUGIN_PATH will be imported upon initialization
20
# of bzrlib (and then forgotten about). In the plugin's main body, it should
21
# update any bzrlib registries it wants to extend; for example, to add new
22
# commands, import bzrlib.commands and add your new command to the
23
# plugin_cmds variable.
18
"""bzr python plugin support
20
Any python module in $BZR_PLUGIN_PATH will be imported upon initialization of
21
bzrlib (and then forgotten about). In the plugin's main body, it should
22
update any bzrlib registries it wants to extend; for example, to add new
23
commands, import bzrlib.commands and add your new command to the plugin_cmds
27
# TODO: Refactor this to make it more testable. The main problem at the
28
# moment is that loading plugins affects the global process state -- for bzr
29
# in general use it's a reasonable assumption that all plugins are loaded at
30
# startup and then stay loaded, but this is less good for testing.
32
# Several specific issues:
33
# - plugins can't be unloaded and will continue to effect later tests
34
# - load_plugins does nothing if called a second time
35
# - plugin hooks can't be removed
37
# Our options are either to remove these restrictions, or work around them by
38
# loading the plugins into a different space than the one running the tests.
39
# That could be either a separate Python interpreter or perhaps a new
40
# namespace inside this interpreter.
28
47
from bzrlib.config import config_dir
48
from bzrlib.trace import log_error, mutter, log_exception, warning, \
50
from bzrlib.errors import BzrError
51
from bzrlib import plugins
29
53
DEFAULT_PLUGIN_PATH = os.path.join(config_dir(), 'plugins')
56
79
#raise BzrError("plugins already initialized")
61
from bzrlib.trace import log_error, mutter, log_exception
62
from bzrlib.errors import BzrError
63
from bzrlib import plugins
65
82
dirs = os.environ.get('BZR_PLUGIN_PATH', DEFAULT_PLUGIN_PATH).split(":")
66
83
dirs.insert(0, os.path.dirname(plugins.__file__))