/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: John Arbash Meinel
  • Date: 2011-03-15 10:28:20 UTC
  • mto: This revision was merged to the branch mainline in revision 5725.
  • Revision ID: john@arbash-meinel.com-20110315102820-51wy8wjre5ol34mu
'bzr export' needs to use 'exact' encoding.

If we are going to be writing binary bites out of stdout, then it needs to
be in binary mode, or it will corrupt the data stream.
Oddly enough, it only seemed to fail if we set '--verbose'. I didn't
bother to track into that bug.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
222
222
    Use of all_command_names() is encouraged rather than builtin_command_names
223
223
    and/or plugin_command_names.
224
224
    """
 
225
    _register_builtin_commands()
225
226
    return builtin_command_registry.keys()
226
227
 
227
228
 
397
398
            will not mangled.
398
399
 
399
400
    :cvar hooks: An instance of CommandHooks.
 
401
    :ivar __doc__: The help shown by 'bzr help command' for this command.
 
402
        This is set by assigning explicitly to __doc__ so that -OO can
 
403
        be used::
 
404
 
 
405
        class Foo(Command):
 
406
            __doc__ = "My help goes here"
400
407
    """
401
408
    aliases = []
402
409
    takes_args = []
407
414
 
408
415
    def __init__(self):
409
416
        """Construct an instance of this command."""
410
 
        if self.__doc__ == Command.__doc__:
411
 
            warn("No help message set for %r" % self)
412
417
        # List of standard options directly supported
413
418
        self.supported_std_options = []
414
419
        self._setup_run()
482
487
            message explaining how to obtain full help.
483
488
        """
484
489
        doc = self.help()
485
 
        if doc is None:
486
 
            raise NotImplementedError("sorry, no detailed help yet for %r" % self.name())
 
490
        if not doc:
 
491
            doc = "No help for this command."
487
492
 
488
493
        # Extract the summary (purpose) and sections out from the text
489
494
        purpose,sections,order = self._get_help_parts(doc)
682
687
 
683
688
        self._setup_outf()
684
689
 
685
 
        return self.run(**all_cmd_args)
 
690
        try:
 
691
            return self.run(**all_cmd_args)
 
692
        finally:
 
693
            # reset it, so that other commands run in the same process won't
 
694
            # inherit state. Before we reset it, log any activity, so that it
 
695
            # gets properly tracked.
 
696
            ui.ui_factory.log_transport_activity(
 
697
                display=('bytes' in debug.debug_flags))
 
698
            trace.set_verbosity_level(0)
686
699
 
687
700
    def _setup_run(self):
688
701
        """Wrap the defined run method on self with a cleanup.
805
818
    else:
806
819
        args = argv
807
820
 
808
 
    options, args = parser.parse_args(args)
 
821
    # for python 2.5 and later, optparse raises this exception if a non-ascii
 
822
    # option name is given.  See http://bugs.python.org/issue2931
 
823
    try:
 
824
        options, args = parser.parse_args(args)
 
825
    except UnicodeEncodeError,e:
 
826
        raise errors.BzrCommandError('Only ASCII permitted in option names')
 
827
 
809
828
    opts = dict([(k, v) for k, v in options.__dict__.iteritems() if
810
829
                 v is not option.OptionParser.DEFAULT_VALUE])
811
830
    return args, opts
1050
1069
        elif a == '--coverage':
1051
1070
            opt_coverage_dir = argv[i + 1]
1052
1071
            i += 1
 
1072
        elif a == '--profile-imports':
 
1073
            pass # already handled in startup script Bug #588277
1053
1074
        elif a.startswith('-D'):
1054
1075
            debug.debug_flags.add(a[2:])
1055
1076
        else:
1077
1098
    if not opt_no_aliases:
1078
1099
        alias_argv = get_alias(argv[0])
1079
1100
        if alias_argv:
1080
 
            user_encoding = osutils.get_user_encoding()
1081
 
            alias_argv = [a.decode(user_encoding) for a in alias_argv]
1082
1101
            argv[0] = alias_argv.pop(0)
1083
1102
 
1084
1103
    cmd = argv.pop(0)
1085
 
    # We want only 'ascii' command names, but the user may have typed
1086
 
    # in a Unicode name. In that case, they should just get a
1087
 
    # 'command not found' error later.
1088
 
 
1089
1104
    cmd_obj = get_cmd_object(cmd, plugins_override=not opt_builtin)
1090
1105
    run = cmd_obj.run_argv_aliases
1091
1106
    run_argv = [argv, alias_argv]
1190
1205
    argv = _specified_or_unicode_argv(argv)
1191
1206
    _register_builtin_commands()
1192
1207
    ret = run_bzr_catch_errors(argv)
1193
 
    bzrlib.ui.ui_factory.log_transport_activity(
1194
 
        display=('bytes' in debug.debug_flags))
1195
1208
    trace.mutter("return code %d", ret)
1196
1209
    return ret
1197
1210