~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Vincent Ladeuil
  • Date: 2012-03-13 17:25:29 UTC
  • mfrom: (6499 +trunk)
  • mto: This revision was merged to the branch mainline in revision 6501.
  • Revision ID: v.ladeuil+lp@free.fr-20120313172529-i0suyjnepsor25i7
Merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
 
17
from __future__ import absolute_import
17
18
 
18
19
# TODO: Define arguments by objects, rather than just using names.
19
20
# Those objects can specify the expected type of the argument, which
32
33
 
33
34
import bzrlib
34
35
from bzrlib import (
 
36
    config,
35
37
    cleanup,
36
38
    cmdline,
37
39
    debug,
224
226
    try:
225
227
        return _get_cmd_object(cmd_name, plugins_override)
226
228
    except KeyError:
227
 
        raise errors.BzrCommandError('unknown command "%s"' % cmd_name)
 
229
        raise errors.BzrCommandError(gettext('unknown command "%s"') % cmd_name)
228
230
 
229
231
 
230
232
def _get_cmd_object(cmd_name, plugins_override=True, check_missing=True):
460
462
            usage help (e.g. Purpose, Usage, Options) with a
461
463
            message explaining how to obtain full help.
462
464
        """
463
 
        if self.l10n and not i18n.installed():
 
465
        if self.l10n:
464
466
            i18n.install()  # Install i18n only for get_help_text for now.
465
467
        doc = self.help()
466
468
        if doc:
549
551
                        see_also_links.append(item)
550
552
                    else:
551
553
                        # Use a Sphinx link for this entry
552
 
                        link_text = gettext(":doc:`%s <%s-help>`") % (item, item)
 
554
                        link_text = gettext(":doc:`{0} <{1}-help>`").format(
 
555
                                                                    item, item)
553
556
                        see_also_links.append(link_text)
554
557
                see_also = see_also_links
555
558
            result += gettext(':See also: %s') % ', '.join(see_also) + '\n'
657
660
            opts['quiet'] = trace.is_quiet()
658
661
        elif opts.has_key('quiet'):
659
662
            del opts['quiet']
660
 
 
661
663
        # mix arguments and options into one dictionary
662
664
        cmdargs = _match_argform(self.name(), self.takes_args, args)
663
665
        cmdopts = {}
688
690
        """
689
691
        class_run = self.run
690
692
        def run(*args, **kwargs):
 
693
            for hook in Command.hooks['pre_command']:
 
694
                hook(self)
691
695
            self._operation = cleanup.OperationWithCleanups(class_run)
692
696
            try:
693
697
                return self._operation.run_simple(*args, **kwargs)
694
698
            finally:
695
699
                del self._operation
 
700
                for hook in Command.hooks['post_command']:
 
701
                    hook(self)
696
702
        self.run = run
697
703
 
698
704
    def run(self):
786
792
            " is safe to mutate - e.g. to remove a command. "
787
793
            "list_commands should return the updated set of command names.",
788
794
            (1, 17))
 
795
        self.add_hook('pre_command',
 
796
            "Called prior to executing a command. Called with the command "
 
797
            "object.", (2, 6))
 
798
        self.add_hook('post_command',
 
799
            "Called after executing a command. Called with the command "
 
800
            "object.", (2, 6))
789
801
 
790
802
Command.hooks = CommandHooks()
791
803
 
810
822
    try:
811
823
        options, args = parser.parse_args(args)
812
824
    except UnicodeEncodeError,e:
813
 
        raise errors.BzrCommandError('Only ASCII permitted in option names')
 
825
        raise errors.BzrCommandError(
 
826
            gettext('Only ASCII permitted in option names'))
814
827
 
815
828
    opts = dict([(k, v) for k, v in options.__dict__.iteritems() if
816
829
                 v is not option.OptionParser.DEFAULT_VALUE])
834
847
                argdict[argname + '_list'] = None
835
848
        elif ap[-1] == '+':
836
849
            if not args:
837
 
                raise errors.BzrCommandError("command %r needs one or more %s"
838
 
                                             % (cmd, argname.upper()))
 
850
                raise errors.BzrCommandError(gettext(
 
851
                      "command {0!r} needs one or more {1}").format(
 
852
                      cmd, argname.upper()))
839
853
            else:
840
854
                argdict[argname + '_list'] = args[:]
841
855
                args = []
842
856
        elif ap[-1] == '$': # all but one
843
857
            if len(args) < 2:
844
 
                raise errors.BzrCommandError("command %r needs one or more %s"
845
 
                                             % (cmd, argname.upper()))
 
858
                raise errors.BzrCommandError(
 
859
                      gettext("command {0!r} needs one or more {1}").format(
 
860
                                             cmd, argname.upper()))
846
861
            argdict[argname + '_list'] = args[:-1]
847
862
            args[:-1] = []
848
863
        else:
849
864
            # just a plain arg
850
865
            argname = ap
851
866
            if not args:
852
 
                raise errors.BzrCommandError("command %r requires argument %s"
853
 
                               % (cmd, argname.upper()))
 
867
                raise errors.BzrCommandError(
 
868
                     gettext("command {0!r} requires argument {1}").format(
 
869
                               cmd, argname.upper()))
854
870
            else:
855
871
                argdict[argname] = args.pop(0)
856
872
 
857
873
    if args:
858
 
        raise errors.BzrCommandError("extra argument to command %s: %s"
859
 
                                     % (cmd, args[0]))
 
874
        raise errors.BzrCommandError( gettext(
 
875
                              "extra argument to command {0}: {1}").format(
 
876
                                       cmd, args[0]) )
860
877
 
861
878
    return argdict
862
879
 
952
969
        stats.pprint()
953
970
    else:
954
971
        stats.save(filename)
955
 
        trace.note('Profile data written to "%s".', filename)
 
972
        trace.note(gettext('Profile data written to "%s".'), filename)
956
973
    return ret
957
974
 
958
975
 
1030
1047
 
1031
1048
    argv_copy = []
1032
1049
    i = 0
 
1050
    override_config = []
1033
1051
    while i < len(argv):
1034
1052
        a = argv[i]
1035
1053
        if a == '--profile':
1058
1076
            pass # already handled in startup script Bug #588277
1059
1077
        elif a.startswith('-D'):
1060
1078
            debug.debug_flags.add(a[2:])
 
1079
        elif a.startswith('-O'):
 
1080
            override_config.append(a[2:])
1061
1081
        else:
1062
1082
            argv_copy.append(a)
1063
1083
        i += 1
1064
1084
 
 
1085
    if bzrlib.global_state is None:
 
1086
        # FIXME: Workaround for users that imported bzrlib but didn't call
 
1087
        # bzrlib.initialize -- vila 2012-01-19
 
1088
        cmdline_overrides = config.CommandLineStore()
 
1089
    else:
 
1090
        cmdline_overrides = bzrlib.global_state.cmdline_overrides
 
1091
    cmdline_overrides._from_cmdline(override_config)
 
1092
 
1065
1093
    debug.set_debug_flags_from_config()
1066
1094
 
1067
1095
    if not opt_no_plugins:
1119
1147
        if 'memory' in debug.debug_flags:
1120
1148
            trace.debug_memory('Process status after command:', short=False)
1121
1149
        option._verbosity_level = saved_verbosity_level
 
1150
        # Reset the overrides 
 
1151
        cmdline_overrides._reset()
1122
1152
 
1123
1153
 
1124
1154
def display_command(func):
1153
1183
        "bzr plugin commands")
1154
1184
    Command.hooks.install_named_hook("get_command", _get_external_command,
1155
1185
        "bzr external command lookup")
1156
 
    Command.hooks.install_named_hook("get_missing_command", _try_plugin_provider,
1157
 
        "bzr plugin-provider-db check")
 
1186
    Command.hooks.install_named_hook("get_missing_command",
 
1187
                                     _try_plugin_provider,
 
1188
                                     "bzr plugin-provider-db check")
1158
1189
 
1159
1190
 
1160
1191