~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/plugin.py

- notes on testability of plugins

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
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.
24
 
 
 
18
"""bzr python plugin support
 
19
 
 
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
 
24
variable.
 
25
"""
 
26
 
 
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.
 
31
 
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
 
36
#
 
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.
25
41
 
26
42
import imp
27
43
import os
41
57
 
42
58
 
43
59
def load_plugins():
44
 
    """
45
 
    Find all python plugins and load them.
 
60
    """Find all python plugins and load them.
46
61
 
47
62
    Loading a plugin means importing it into the python interpreter.
48
63
    The plugin is expected to make calls to register commands when
127
142
                ## pdb.set_trace()
128
143
                warning('Unable to load plugin %r from %r' % (name, d))
129
144
                log_exception_quietly()
130