357
357
summary, then a complete description of the command. A grammar
358
358
description will be inserted.
361
Other accepted names for this command.
364
List of argument forms, marked with whether they are optional,
369
['to_location', 'from_branch?', 'file*']
371
'to_location' is required
372
'from_branch' is optional
373
'file' can be specified 0 or more times
376
List of options that may be given for this command. These can
377
be either strings, referring to globally-defined options,
378
or option objects. Retrieve through options().
381
If true, this command isn't advertised. This is typically
360
:cvar aliases: Other accepted names for this command.
362
:cvar takes_args: List of argument forms, marked with whether they are
363
optional, repeated, etc. Examples::
365
['to_location', 'from_branch?', 'file*']
367
* 'to_location' is required
368
* 'from_branch' is optional
369
* 'file' can be specified 0 or more times
371
:cvar takes_options: List of options that may be given for this command.
372
These can be either strings, referring to globally-defined options, or
373
option objects. Retrieve through options().
375
:cvar hidden: If true, this command isn't advertised. This is typically
382
376
for commands intended for expert users.
385
Command objects will get a 'outf' attribute, which has been
386
setup to properly handle encoding of unicode strings.
387
encoding_type determines what will happen when characters cannot
389
strict - abort if we cannot decode
390
replace - put in a bogus character (typically '?')
391
exact - do not encode sys.stdout
393
NOTE: by default on Windows, sys.stdout is opened as a text
394
stream, therefore LF line-endings are converted to CRLF.
395
When a command uses encoding_type = 'exact', then
396
sys.stdout is forced to be a binary stream, and line-endings
378
:cvar encoding_type: Command objects will get a 'outf' attribute, which has
379
been setup to properly handle encoding of unicode strings.
380
encoding_type determines what will happen when characters cannot be
383
* strict - abort if we cannot decode
384
* replace - put in a bogus character (typically '?')
385
* exact - do not encode sys.stdout
387
NOTE: by default on Windows, sys.stdout is opened as a text stream,
388
therefore LF line-endings are converted to CRLF. When a command uses
389
encoding_type = 'exact', then sys.stdout is forced to be a binary
390
stream, and line-endings will not mangled.
393
A string indicating the real name under which this command was
394
invoked, before expansion of aliases.
395
(This may be None if the command was constructed and run in-process.)
399
397
:cvar hooks: An instance of CommandHooks.
399
:cvar __doc__: The help shown by 'bzr help command' for this command.
400
This is set by assigning explicitly to __doc__ so that -OO can
404
__doc__ = "My help goes here"
403
408
takes_options = []
404
409
encoding_type = 'strict'
408
414
def __init__(self):
409
415
"""Construct an instance of this command."""
410
if self.__doc__ == Command.__doc__:
411
warn("No help message set for %r" % self)
412
416
# List of standard options directly supported
413
417
self.supported_std_options = []
414
418
self._setup_run()
509
513
# so we get <https://bugs.launchpad.net/bzr/+bug/249908>. -- mbp
511
515
options = option.get_optparser(self.options()).format_option_help()
512
# XXX: According to the spec, ReST option lists actually don't support
513
# options like --1.9 so that causes syntax errors (in Sphinx at least).
514
# As that pattern always appears in the commands that break, we trap
515
# on that and then format that block of 'format' options as a literal
517
if not plain and options.find(' --1.9 ') != -1:
516
# FIXME: According to the spec, ReST option lists actually don't
517
# support options like --1.14 so that causes syntax errors (in Sphinx
518
# at least). As that pattern always appears in the commands that
519
# break, we trap on that and then format that block of 'format' options
520
# as a literal block. We use the most recent format still listed so we
521
# don't have to do that too often -- vila 20110514
522
if not plain and options.find(' --1.14 ') != -1:
518
523
options = options.replace(' format:\n', ' format::\n\n', 1)
519
524
if options.startswith('Options:'):
520
525
result += ':' + options
762
779
These are all empty initially, because by default nothing should get
766
self.create_hook(HookPoint('extend_command',
782
Hooks.__init__(self, "bzrlib.commands", "Command.hooks")
783
self.add_hook('extend_command',
767
784
"Called after creating a command object to allow modifications "
768
785
"such as adding or removing options, docs etc. Called with the "
769
"new bzrlib.commands.Command object.", (1, 13), None))
770
self.create_hook(HookPoint('get_command',
786
"new bzrlib.commands.Command object.", (1, 13))
787
self.add_hook('get_command',
771
788
"Called when creating a single command. Called with "
772
789
"(cmd_or_None, command_name). get_command should either return "
773
790
"the cmd_or_None parameter, or a replacement Command object that "
774
791
"should be used for the command. Note that the Command.hooks "
775
792
"hooks are core infrastructure. Many users will prefer to use "
776
793
"bzrlib.commands.register_command or plugin_cmds.register_lazy.",
778
self.create_hook(HookPoint('get_missing_command',
795
self.add_hook('get_missing_command',
779
796
"Called when creating a single command if no command could be "
780
797
"found. Called with (command_name). get_missing_command should "
781
798
"either return None, or a Command object to be used for the "
782
"command.", (1, 17), None))
783
self.create_hook(HookPoint('list_commands',
800
self.add_hook('list_commands',
784
801
"Called when enumerating commands. Called with a set of "
785
802
"cmd_name strings for all the commands found so far. This set "
786
803
" is safe to mutate - e.g. to remove a command. "
787
804
"list_commands should return the updated set of command names.",
790
807
Command.hooks = CommandHooks()
808
options, args = parser.parse_args(args)
825
# for python 2.5 and later, optparse raises this exception if a non-ascii
826
# option name is given. See http://bugs.python.org/issue2931
828
options, args = parser.parse_args(args)
829
except UnicodeEncodeError,e:
830
raise errors.BzrCommandError('Only ASCII permitted in option names')
809
832
opts = dict([(k, v) for k, v in options.__dict__.iteritems() if
810
833
v is not option.OptionParser.DEFAULT_VALUE])
811
834
return args, opts
1077
1102
if not opt_no_aliases:
1078
1103
alias_argv = get_alias(argv[0])
1080
user_encoding = osutils.get_user_encoding()
1081
alias_argv = [a.decode(user_encoding) for a in alias_argv]
1082
1105
argv[0] = alias_argv.pop(0)
1084
1107
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.
1089
1108
cmd_obj = get_cmd_object(cmd, plugins_override=not opt_builtin)
1090
1109
run = cmd_obj.run_argv_aliases
1091
1110
run_argv = [argv, alias_argv]
1252
1270
class Provider(object):
1253
'''Generic class to be overriden by plugins'''
1271
"""Generic class to be overriden by plugins"""
1255
1273
def plugin_for_command(self, cmd_name):
1256
'''Takes a command and returns the information for that plugin
1274
"""Takes a command and returns the information for that plugin
1258
1276
:return: A dictionary with all the available information
1259
for the requested plugin
1277
for the requested plugin
1261
1279
raise NotImplementedError
1264
1282
class ProvidersRegistry(registry.Registry):
1265
'''This registry exists to allow other providers to exist'''
1283
"""This registry exists to allow other providers to exist"""
1267
1285
def __iter__(self):
1268
1286
for key, provider in self.iteritems():