359
357
summary, then a complete description of the command. A grammar
360
358
description will be inserted.
362
:cvar aliases: Other accepted names for this command.
364
:cvar takes_args: List of argument forms, marked with whether they are
365
optional, repeated, etc. Examples::
367
['to_location', 'from_branch?', 'file*']
369
* 'to_location' is required
370
* 'from_branch' is optional
371
* 'file' can be specified 0 or more times
373
:cvar takes_options: List of options that may be given for this command.
374
These can be either strings, referring to globally-defined options, or
375
option objects. Retrieve through options().
377
:cvar hidden: If true, this command isn't advertised. This is typically
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
378
382
for commands intended for expert users.
380
:cvar encoding_type: Command objects will get a 'outf' attribute, which has
381
been setup to properly handle encoding of unicode strings.
382
encoding_type determines what will happen when characters cannot be
385
* strict - abort if we cannot decode
386
* replace - put in a bogus character (typically '?')
387
* exact - do not encode sys.stdout
389
NOTE: by default on Windows, sys.stdout is opened as a text stream,
390
therefore LF line-endings are converted to CRLF. When a command uses
391
encoding_type = 'exact', then sys.stdout is forced to be a binary
392
stream, and line-endings will not mangled.
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
395
400
A string indicating the real name under which this command was
396
invoked, before expansion of aliases.
401
invoked, before expansion of aliases.
397
402
(This may be None if the command was constructed and run in-process.)
399
404
:cvar hooks: An instance of CommandHooks.
401
:cvar __doc__: The help shown by 'bzr help command' for this command.
406
:ivar __doc__: The help shown by 'bzr help command' for this command.
402
407
This is set by assigning explicitly to __doc__ so that -OO can
406
__doc__ = "My help goes here"
411
__doc__ = "My help goes here"
410
415
takes_options = []
411
416
encoding_type = 'strict'
412
417
invoked_as = None
488
492
usage help (e.g. Purpose, Usage, Options) with a
489
493
message explaining how to obtain full help.
491
if self.l10n and not i18n.installed():
492
i18n.install() # Install i18n only for get_help_text for now.
493
495
doc = self.help()
495
# Note: If self.gettext() translates ':Usage:\n', the section will
496
# be shown after "Description" section and we don't want to
497
# translate the usage string.
498
# Though, bzr export-pot don't exports :Usage: section and it must
500
doc = self.gettext(doc)
502
doc = gettext("No help for this command.")
497
doc = "No help for this command."
504
499
# Extract the summary (purpose) and sections out from the text
505
500
purpose,sections,order = self._get_help_parts(doc)
546
543
if sections.has_key(None):
547
544
text = sections.pop(None)
548
545
text = '\n '.join(text.splitlines())
549
result += gettext(':Description:\n %s\n\n') % (text,)
546
result += ':%s:\n %s\n\n' % ('Description',text)
551
548
# Add the custom sections (e.g. Examples). Note that there's no need
552
549
# to indent these as they must be indented already in the source.
554
551
for label in order:
555
if label in sections:
556
result += ':%s:\n%s\n' % (label, sections[label])
552
if sections.has_key(label):
553
result += ':%s:\n%s\n' % (label,sections[label])
559
result += (gettext("See bzr help %s for more details and examples.\n\n")
556
result += ("See bzr help %s for more details and examples.\n\n"
562
559
# Add the aliases, source (plug-in) and see also links, if any
564
result += gettext(':Aliases: ')
561
result += ':Aliases: '
565
562
result += ', '.join(self.aliases) + '\n'
566
563
plugin_name = self.plugin_name()
567
564
if plugin_name is not None:
568
result += gettext(':From: plugin "%s"\n') % plugin_name
565
result += ':From: plugin "%s"\n' % plugin_name
569
566
see_also = self.get_see_also(additional_see_also)
571
568
if not plain and see_also_as_links:
577
574
see_also_links.append(item)
579
576
# Use a Sphinx link for this entry
580
link_text = gettext(":doc:`%s <%s-help>`") % (item, item)
577
link_text = ":doc:`%s <%s-help>`" % (item, item)
581
578
see_also_links.append(link_text)
582
579
see_also = see_also_links
583
result += gettext(':See also: %s') % ', '.join(see_also) + '\n'
580
result += ':See also: '
581
result += ', '.join(see_also) + '\n'
585
583
# If this will be rendered as plain text, convert it
667
665
def run_argv_aliases(self, argv, alias_argv=None):
668
666
"""Parse the command line and run with extra aliases in alias_argv."""
669
667
args, opts = parse_args(self, argv, alias_argv)
672
669
# Process the standard options
673
670
if 'help' in opts: # e.g. bzr add --help
674
self.outf.write(self.get_help_text())
671
sys.stdout.write(self.get_help_text())
676
673
if 'usage' in opts: # e.g. bzr add --usage
677
self.outf.write(self.get_help_text(verbose=False))
674
sys.stdout.write(self.get_help_text(verbose=False))
679
676
trace.set_verbosity_level(option._verbosity_level)
680
677
if 'verbose' in self.supported_std_options:
1290
1277
class Provider(object):
1291
"""Generic class to be overriden by plugins"""
1278
'''Generic class to be overriden by plugins'''
1293
1280
def plugin_for_command(self, cmd_name):
1294
"""Takes a command and returns the information for that plugin
1281
'''Takes a command and returns the information for that plugin
1296
1283
:return: A dictionary with all the available information
1297
for the requested plugin
1284
for the requested plugin
1299
1286
raise NotImplementedError
1302
1289
class ProvidersRegistry(registry.Registry):
1303
"""This registry exists to allow other providers to exist"""
1290
'''This registry exists to allow other providers to exist'''
1305
1292
def __iter__(self):
1306
1293
for key, provider in self.iteritems():