~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Vincent Ladeuil
  • Date: 2011-02-10 12:37:27 UTC
  • mto: This revision was merged to the branch mainline in revision 5661.
  • Revision ID: v.ladeuil+lp@free.fr-20110210123727-8e0pu4wtlt6fj7nf
thread is already a python module, avoid confusion and use cethread instead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
from bzrlib.lazy_import import lazy_import
29
29
lazy_import(globals(), """
 
30
import codecs
30
31
import errno
31
32
import threading
 
33
from warnings import warn
32
34
 
33
35
import bzrlib
34
36
from bzrlib import (
40
42
    osutils,
41
43
    trace,
42
44
    ui,
 
45
    win32utils,
43
46
    )
44
47
""")
45
48
 
46
 
from bzrlib.hooks import Hooks
 
49
from bzrlib.hooks import HookPoint, Hooks
47
50
# Compatibility - Option used to be in commands.
48
51
from bzrlib.option import Option
49
52
from bzrlib.plugin import disable_plugins, load_plugins
273
276
    # Allow plugins to extend commands
274
277
    for hook in Command.hooks['extend_command']:
275
278
        hook(cmd)
276
 
    if getattr(cmd, 'invoked_as', None) is None:
277
 
        cmd.invoked_as = cmd_name
278
279
    return cmd
279
280
 
280
281
 
396
397
            sys.stdout is forced to be a binary stream, and line-endings
397
398
            will not mangled.
398
399
 
399
 
    :ivar invoked_as:
400
 
        A string indicating the real name under which this command was
401
 
        invoked, before expansion of aliases. 
402
 
        (This may be None if the command was constructed and run in-process.)
403
 
 
404
400
    :cvar hooks: An instance of CommandHooks.
405
 
 
406
401
    :ivar __doc__: The help shown by 'bzr help command' for this command.
407
402
        This is set by assigning explicitly to __doc__ so that -OO can
408
403
        be used::
414
409
    takes_args = []
415
410
    takes_options = []
416
411
    encoding_type = 'strict'
417
 
    invoked_as = None
418
412
 
419
413
    hidden = False
420
414
 
758
752
        return getdoc(self)
759
753
 
760
754
    def name(self):
761
 
        """Return the canonical name for this command.
762
 
 
763
 
        The name under which it was actually invoked is available in invoked_as.
764
 
        """
765
755
        return _unsquish_command_name(self.__class__.__name__)
766
756
 
767
757
    def plugin_name(self):
785
775
        These are all empty initially, because by default nothing should get
786
776
        notified.
787
777
        """
788
 
        Hooks.__init__(self, "bzrlib.commands", "Command.hooks")
789
 
        self.add_hook('extend_command',
 
778
        Hooks.__init__(self)
 
779
        self.create_hook(HookPoint('extend_command',
790
780
            "Called after creating a command object to allow modifications "
791
781
            "such as adding or removing options, docs etc. Called with the "
792
 
            "new bzrlib.commands.Command object.", (1, 13))
793
 
        self.add_hook('get_command',
 
782
            "new bzrlib.commands.Command object.", (1, 13), None))
 
783
        self.create_hook(HookPoint('get_command',
794
784
            "Called when creating a single command. Called with "
795
785
            "(cmd_or_None, command_name). get_command should either return "
796
786
            "the cmd_or_None parameter, or a replacement Command object that "
797
787
            "should be used for the command. Note that the Command.hooks "
798
788
            "hooks are core infrastructure. Many users will prefer to use "
799
789
            "bzrlib.commands.register_command or plugin_cmds.register_lazy.",
800
 
            (1, 17))
801
 
        self.add_hook('get_missing_command',
 
790
            (1, 17), None))
 
791
        self.create_hook(HookPoint('get_missing_command',
802
792
            "Called when creating a single command if no command could be "
803
793
            "found. Called with (command_name). get_missing_command should "
804
794
            "either return None, or a Command object to be used for the "
805
 
            "command.", (1, 17))
806
 
        self.add_hook('list_commands',
 
795
            "command.", (1, 17), None))
 
796
        self.create_hook(HookPoint('list_commands',
807
797
            "Called when enumerating commands. Called with a set of "
808
798
            "cmd_name strings for all the commands found so far. This set "
809
799
            " is safe to mutate - e.g. to remove a command. "
810
800
            "list_commands should return the updated set of command names.",
811
 
            (1, 17))
 
801
            (1, 17), None))
812
802
 
813
803
Command.hooks = CommandHooks()
814
804
 
1044
1034
        Specify the number of processes that can be run concurrently (selftest).
1045
1035
    """
1046
1036
    trace.mutter("bazaar version: " + bzrlib.__version__)
1047
 
    argv = _specified_or_unicode_argv(argv)
 
1037
    argv = list(argv)
1048
1038
    trace.mutter("bzr arguments: %r", argv)
1049
1039
 
1050
1040
    opt_lsprof = opt_profile = opt_no_plugins = opt_builtin =  \
1190
1180
        new_argv = []
1191
1181
        try:
1192
1182
            # ensure all arguments are unicode strings
1193
 
            for a in argv:
 
1183
            for a in argv[1:]:
1194
1184
                if isinstance(a, unicode):
1195
1185
                    new_argv.append(a)
1196
1186
                else:
1212
1202
 
1213
1203
    :return: exit code of bzr command.
1214
1204
    """
1215
 
    if argv is not None:
1216
 
        argv = argv[1:]
 
1205
    argv = _specified_or_unicode_argv(argv)
1217
1206
    _register_builtin_commands()
1218
1207
    ret = run_bzr_catch_errors(argv)
1219
1208
    trace.mutter("return code %d", ret)