* svn style help output format
This commit is contained in:
+65
-4
@@ -11,7 +11,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from optparse import OptionParser, OptionGroup
|
from optparse import OptionParser, OptionGroup, HelpFormatter
|
||||||
|
|
||||||
import gettext
|
import gettext
|
||||||
__trans = gettext.translation('pisi', fallback=True)
|
__trans = gettext.translation('pisi', fallback=True)
|
||||||
@@ -28,6 +28,67 @@ from colors import colorize
|
|||||||
class Error(pisi.Error):
|
class Error(pisi.Error):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class PisiHelpFormatter(HelpFormatter):
|
||||||
|
def __init__(self,
|
||||||
|
indent_increment=1,
|
||||||
|
max_help_position=32,
|
||||||
|
width=None,
|
||||||
|
short_first=1):
|
||||||
|
HelpFormatter.__init__(
|
||||||
|
self, indent_increment, max_help_position, width, short_first)
|
||||||
|
|
||||||
|
self._short_opt_fmt = "%s"
|
||||||
|
self._long_opt_fmt = "%s"
|
||||||
|
|
||||||
|
def format_usage(self, usage):
|
||||||
|
return _("usage: %s\n") % usage
|
||||||
|
|
||||||
|
def format_heading(self, heading):
|
||||||
|
return "%*s%s:\n" % (self.current_indent, "", heading)
|
||||||
|
|
||||||
|
def format_option_strings(self, option):
|
||||||
|
"""Return a comma-separated list of option strings & metavariables."""
|
||||||
|
if option.takes_value():
|
||||||
|
short_opts = [self._short_opt_fmt % sopt
|
||||||
|
for sopt in option._short_opts]
|
||||||
|
long_opts = [self._long_opt_fmt % lopt
|
||||||
|
for lopt in option._long_opts]
|
||||||
|
else:
|
||||||
|
short_opts = option._short_opts
|
||||||
|
long_opts = option._long_opts
|
||||||
|
|
||||||
|
if long_opts and short_opts:
|
||||||
|
opt = "%s [%s]" % (short_opts[0], long_opts[0])
|
||||||
|
else:
|
||||||
|
opt = long_opts[0] or short_opts[0]
|
||||||
|
|
||||||
|
if option.takes_value():
|
||||||
|
opt += " arg"
|
||||||
|
|
||||||
|
return opt
|
||||||
|
|
||||||
|
def format_option(self, option):
|
||||||
|
import textwrap
|
||||||
|
result = []
|
||||||
|
opts = self.option_strings[option]
|
||||||
|
opt_width = self.help_position - self.current_indent - 2
|
||||||
|
if len(opts) > opt_width:
|
||||||
|
opts = "%*s%s\n" % (self.current_indent, "", opts)
|
||||||
|
indent_first = self.help_position
|
||||||
|
else: # start help on same line as opts
|
||||||
|
opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts)
|
||||||
|
indent_first = 0
|
||||||
|
result.append(opts)
|
||||||
|
if option.help:
|
||||||
|
help_text = self.expand_default(option)
|
||||||
|
help_lines = textwrap.wrap(help_text, self.help_width)
|
||||||
|
result.append(": %*s%s\n" % (indent_first, "", help_lines[0]))
|
||||||
|
result.extend([" %*s%s\n" % (self.help_position, "", line)
|
||||||
|
for line in help_lines[1:]])
|
||||||
|
elif opts[-1] != "\n":
|
||||||
|
result.append("\n")
|
||||||
|
return "".join(result)
|
||||||
|
|
||||||
|
|
||||||
class Command(object):
|
class Command(object):
|
||||||
"""generic help string for any command"""
|
"""generic help string for any command"""
|
||||||
@@ -70,7 +131,8 @@ class Command(object):
|
|||||||
import pisi
|
import pisi
|
||||||
self.comar = False
|
self.comar = False
|
||||||
self.parser = OptionParser(usage=getattr(self, "__doc__"),
|
self.parser = OptionParser(usage=getattr(self, "__doc__"),
|
||||||
version="%prog " + pisi.__version__)
|
version="%prog " + pisi.__version__,
|
||||||
|
formatter=PisiHelpFormatter())
|
||||||
self.options()
|
self.options()
|
||||||
self.commonopts()
|
self.commonopts()
|
||||||
(self.options, self.args) = self.parser.parse_args(args)
|
(self.options, self.args) = self.parser.parse_args(args)
|
||||||
@@ -167,9 +229,8 @@ class Command(object):
|
|||||||
|
|
||||||
def help(self):
|
def help(self):
|
||||||
"""print help for the command"""
|
"""print help for the command"""
|
||||||
print self.format_name() + ': '
|
|
||||||
trans = gettext.translation('pisi', fallback=True)
|
trans = gettext.translation('pisi', fallback=True)
|
||||||
print trans.ugettext(self.__doc__) + '\n'
|
print "%s: %s\n" % (self.format_name(), trans.ugettext(self.__doc__))
|
||||||
print self.parser.format_option_help()
|
print self.parser.format_option_help()
|
||||||
|
|
||||||
def die(self):
|
def die(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user