From cf31fe9b4fb650b27e19f5d7ee7297e383660caf Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Tue, 21 Oct 2008 07:00:00 -0700 Subject: Initial Contribution --- subcmds/help.py | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 subcmds/help.py (limited to 'subcmds/help.py') diff --git a/subcmds/help.py b/subcmds/help.py new file mode 100644 index 00000000..6e0238a0 --- /dev/null +++ b/subcmds/help.py @@ -0,0 +1,147 @@ +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +from formatter import AbstractFormatter, DumbWriter + +from color import Coloring +from command import PagedCommand + +class Help(PagedCommand): + common = False + helpSummary = "Display detailed help on a command" + helpUsage = """ +%prog [--all|command] +""" + helpDescription = """ +Displays detailed usage information about a command. +""" + + def _PrintAllCommands(self): + print 'usage: repo COMMAND [ARGS]' + print """ +The complete list of recognized repo commands are: +""" + commandNames = self.commands.keys() + commandNames.sort() + + maxlen = 0 + for name in commandNames: + maxlen = max(maxlen, len(name)) + fmt = ' %%-%ds %%s' % maxlen + + for name in commandNames: + command = self.commands[name] + try: + summary = command.helpSummary.strip() + except AttributeError: + summary = '' + print fmt % (name, summary) + print """ +See 'repo help ' for more information on a specific command. +""" + + def _PrintCommonCommands(self): + print 'usage: repo COMMAND [ARGS]' + print """ +The most commonly used repo commands are: +""" + commandNames = [name + for name in self.commands.keys() + if self.commands[name].common] + commandNames.sort() + + maxlen = 0 + for name in commandNames: + maxlen = max(maxlen, len(name)) + fmt = ' %%-%ds %%s' % maxlen + + for name in commandNames: + command = self.commands[name] + try: + summary = command.helpSummary.strip() + except AttributeError: + summary = '' + print fmt % (name, summary) + print """ +See 'repo help ' for more information on a specific command. +""" + + def _PrintCommandHelp(self, cmd): + class _Out(Coloring): + def __init__(self, gc): + Coloring.__init__(self, gc, 'help') + self.heading = self.printer('heading', attr='bold') + + self.wrap = AbstractFormatter(DumbWriter()) + + def _PrintSection(self, heading, bodyAttr): + try: + body = getattr(cmd, bodyAttr) + except AttributeError: + return + + self.nl() + + self.heading('%s', heading) + self.nl() + + self.heading('%s', ''.ljust(len(heading), '-')) + self.nl() + + me = 'repo %s' % cmd.NAME + body = body.strip() + body = body.replace('%prog', me) + + for para in body.split("\n\n"): + if para.startswith(' '): + self.write('%s', para) + self.nl() + self.nl() + else: + self.wrap.add_flowing_data(para) + self.wrap.end_paragraph(1) + self.wrap.end_paragraph(0) + + out = _Out(self.manifest.globalConfig) + cmd.OptionParser.print_help() + out._PrintSection('Summary', 'helpSummary') + out._PrintSection('Description', 'helpDescription') + + def _Options(self, p): + p.add_option('-a', '--all', + dest='show_all', action='store_true', + help='show the complete list of commands') + + def Execute(self, opt, args): + if len(args) == 0: + if opt.show_all: + self._PrintAllCommands() + else: + self._PrintCommonCommands() + + elif len(args) == 1: + name = args[0] + + try: + cmd = self.commands[name] + except KeyError: + print >>sys.stderr, "repo: '%s' is not a repo command." % name + sys.exit(1) + + self._PrintCommandHelp(cmd) + + else: + self._PrintCommandHelp(self) -- cgit v1.2.3-54-g00ecf