~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/help.py

  • Committer: Robert Collins
  • Date: 2007-04-20 01:57:10 UTC
  • mto: This revision was merged to the branch mainline in revision 2441.
  • Revision ID: robertc@robertcollins.net-20070420015710-apsxzfznrnpg6x17
Relocate command help onto Command.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
    if topics:
43
43
        outfile.write(topics[0].get_help_text())
44
44
    else:
45
 
        help_on_command(topic, outfile=outfile)
46
 
 
47
 
 
48
 
def command_usage(cmd_object):
49
 
    """Return single-line grammar for command.
50
 
 
51
 
    Only describes arguments, not options.
52
 
    """
53
 
    s = 'bzr ' + cmd_object.name() + ' '
54
 
    for aname in cmd_object.takes_args:
55
 
        aname = aname.upper()
56
 
        if aname[-1] in ['$', '+']:
57
 
            aname = aname[:-1] + '...'
58
 
        elif aname[-1] == '?':
59
 
            aname = '[' + aname[:-1] + ']'
60
 
        elif aname[-1] == '*':
61
 
            aname = '[' + aname[:-1] + '...]'
62
 
        s += aname + ' '
63
 
            
64
 
    assert s[-1] == ' '
65
 
    s = s[:-1]
66
 
    
67
 
    return s
68
 
 
69
 
 
70
 
def print_command_plugin(cmd_object, outfile, format):
71
 
    """Print the plugin that provides a command object, if any.
72
 
 
73
 
    If the cmd_object is provided by a plugin, prints the plugin name to
74
 
    outfile using the provided format string.
75
 
    """
76
 
    plugin_name = cmd_object.plugin_name()
77
 
    if plugin_name is not None:
78
 
        out_str = '(From plugin "%s")' % plugin_name
79
 
        outfile.write(format % out_str)
80
 
 
81
 
 
82
 
def help_on_command(cmdname, outfile=None):
83
 
    cmdname = str(cmdname)
84
 
    cmd_object = _mod_commands.get_cmd_object(cmdname)
85
 
 
86
 
    return help_on_command_object(cmd_object, cmdname, outfile)
87
 
 
88
 
 
89
 
def help_on_command_object(cmd_object, cmdname, outfile=None):
90
 
    """Generate help on the cmd_object with a supplied name of cmdname.
91
 
 
92
 
    :param cmd_object: An instance of a Command.
93
 
    :param cmdname: The user supplied name. This might be an alias for example.
94
 
    :param outfile: A stream to write the help to.
95
 
    """
96
 
    if outfile is None:
97
 
        outfile = sys.stdout
98
 
 
99
 
    doc = cmd_object.help()
100
 
    if doc is None:
101
 
        raise NotImplementedError("sorry, no detailed help yet for %r" % cmdname)
102
 
 
103
 
    print >>outfile, 'usage:', command_usage(cmd_object)
104
 
 
105
 
    if cmd_object.aliases:
106
 
        print >>outfile, 'aliases:',
107
 
        print >>outfile, ', '.join(cmd_object.aliases)
108
 
 
109
 
    print >>outfile
110
 
 
111
 
    print_command_plugin(cmd_object, outfile, '%s\n\n')
112
 
 
113
 
    outfile.write(doc)
114
 
    if doc[-1] != '\n':
115
 
        outfile.write('\n')
116
 
    help_on_command_options(cmd_object, outfile)
117
 
    see_also = cmd_object.get_see_also()
118
 
    if see_also:
119
 
        outfile.write('\nSee also: ')
120
 
        outfile.write(', '.join(see_also))
121
 
        outfile.write('\n')
122
 
 
123
 
 
124
 
def help_on_command_options(cmd, outfile=None):
125
 
    from bzrlib.option import Option, get_optparser
126
 
    if outfile is None:
127
 
        outfile = sys.stdout
128
 
    options = cmd.options()
129
 
    outfile.write('\n')
130
 
    outfile.write(get_optparser(options).format_option_help())
 
45
        cmdname = str(topic)
 
46
        cmd_object = _mod_commands.get_cmd_object(cmdname)
 
47
        outfile.write(cmd_object.get_help_text())
131
48
 
132
49
 
133
50
def help_commands(outfile=None):