~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/help.py

  • Committer: Martin Pool
  • Date: 2005-08-25 00:47:04 UTC
  • Revision ID: mbp@sourcefrog.net-20050825004704-e3c75123f29539bf
- expose 'find-merge-base' as a new expert command,
  to help in debugging merges

  move UnrelatedBranches exception into bzrlib.errors

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
# TODO: Some way to get a list of external commands (defined by shell
18
 
# scripts) so that they can be included in the help listing as well.
19
 
# It should be enough to just list the plugin directory and look for
20
 
# executable files with reasonable names.
21
 
 
22
 
# TODO: `help commands --all` should show hidden commands
23
 
 
24
17
global_help = \
25
18
"""Bazaar-NG -- a free distributed version-control tool
26
19
http://bazaar-ng.org/
65
58
        help_on_command(topic, outfile = outfile)
66
59
 
67
60
 
68
 
def command_usage(cmd_object):
 
61
def command_usage(cmdname, cmdclass):
69
62
    """Return single-line grammar for command.
70
63
 
71
64
    Only describes arguments, not options.
72
65
    """
73
 
    s = 'bzr ' + cmd_object.name() + ' '
74
 
    for aname in cmd_object.takes_args:
 
66
    s = cmdname + ' '
 
67
    for aname in cmdclass.takes_args:
75
68
        aname = aname.upper()
76
69
        if aname[-1] in ['$', '+']:
77
70
            aname = aname[:-1] + '...'
87
80
    return s
88
81
 
89
82
 
90
 
def help_on_command(cmdname, outfile=None):
91
 
    from bzrlib.commands import get_cmd_object
92
 
 
 
83
def help_on_command(cmdname, outfile = None):
93
84
    cmdname = str(cmdname)
94
85
 
95
86
    if outfile == None:
96
87
        outfile = sys.stdout
97
88
 
98
 
    cmd_object = get_cmd_object(cmdname)
 
89
    from inspect import getdoc
 
90
    import commands
 
91
    topic, cmdclass = commands.get_cmd_class(cmdname)
99
92
 
100
 
    doc = cmd_object.help()
 
93
    doc = getdoc(cmdclass)
101
94
    if doc == None:
102
95
        raise NotImplementedError("sorry, no detailed help yet for %r" % cmdname)
103
96
 
104
 
    print >>outfile, 'usage:', command_usage(cmd_object) 
105
 
 
106
 
    if cmd_object.aliases:
107
 
        print >>outfile, 'aliases:',
108
 
        print >>outfile, ', '.join(cmd_object.aliases)
109
 
 
110
 
    print >>outfile
111
 
 
 
97
    outfile.write('usage: ' + command_usage(topic, cmdclass) + '\n')
 
98
 
 
99
    if cmdclass.aliases:
 
100
        outfile.write('aliases: ' + ', '.join(cmdclass.aliases) + '\n')
 
101
    
112
102
    outfile.write(doc)
113
103
    if doc[-1] != '\n':
114
104
        outfile.write('\n')
115
105
    
116
 
    help_on_options(cmd_object.takes_options, outfile=None)
117
 
 
118
 
 
119
 
def help_on_options(options, outfile=None):
120
 
    from bzrlib.commands import SHORT_OPTIONS
 
106
    help_on_option(cmdclass.takes_options, outfile = None)
 
107
 
 
108
 
 
109
def help_on_option(options, outfile = None):
 
110
    import commands
121
111
    
122
112
    if not options:
123
113
        return
128
118
    outfile.write('\noptions:\n')
129
119
    for on in options:
130
120
        l = '    --' + on
131
 
        for shortname, longname in SHORT_OPTIONS.items():
 
121
        for shortname, longname in commands.SHORT_OPTIONS.items():
132
122
            if longname == on:
133
123
                l += ', -' + shortname
134
124
                break
135
125
        outfile.write(l + '\n')
136
126
 
137
127
 
138
 
def help_commands(outfile=None):
 
128
def help_commands(outfile = None):
139
129
    """List all commands"""
140
 
    from bzrlib.commands import (builtin_command_names,
141
 
                                 plugin_command_names,
142
 
                                 get_cmd_object)
 
130
    import inspect
 
131
    import commands
143
132
 
144
133
    if outfile == None:
145
134
        outfile = sys.stdout
146
 
 
147
 
    names = set()                       # to eliminate duplicates
148
 
    names.update(builtin_command_names())
149
 
    names.update(plugin_command_names())
150
 
    names = list(names)
151
 
    names.sort()
152
 
 
153
 
    for cmd_name in names:
154
 
        cmd_object = get_cmd_object(cmd_name)
155
 
        if cmd_object.hidden:
 
135
    
 
136
    accu = []
 
137
    for cmdname, cmdclass in commands.get_all_cmds():
 
138
        accu.append((cmdname, cmdclass))
 
139
    accu.sort()
 
140
    for cmdname, cmdclass in accu:
 
141
        if cmdclass.hidden:
156
142
            continue
157
 
        print >>outfile, command_usage(cmd_object)
158
 
        cmd_help = cmd_object.help()
159
 
        if cmd_help:
160
 
            firstline = cmd_help.split('\n', 1)[0]
161
 
            print >>outfile, '    ' + firstline
162
 
        
 
143
        outfile.write(command_usage(cmdname, cmdclass) + '\n')
 
144
        help = inspect.getdoc(cmdclass)
 
145
        if help:
 
146
            outfile.write("    " + help.split('\n', 1)[0] + '\n')
 
147
 
 
148
            
 
149