/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/help.py

  • Committer: Aaron Bentley
  • Date: 2006-11-17 04:06:03 UTC
  • mfrom: (2139 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2162.
  • Revision ID: aaron.bentley@utoronto.ca-20061117040603-pgebxndswvwk26tt
Merge from bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2004, 2005, 2006 by Canonical Ltd
 
1
# Copyright (C) 2004, 2005, 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
20
20
# executable files with reasonable names.
21
21
 
22
22
# TODO: `help commands --all` should show hidden commands
 
23
 
 
24
import sys
23
25
import textwrap
24
26
 
25
 
global_help = \
26
 
"""Bazaar -- a free distributed version-control tool
27
 
http://bazaar-vcs.org/
28
 
 
29
 
Basic commands:
30
 
 
31
 
  bzr init           makes this directory a versioned branch
32
 
  bzr branch         make a copy of another branch
33
 
 
34
 
  bzr add            make files or directories versioned
35
 
  bzr ignore         ignore a file or pattern
36
 
  bzr mv             move or rename a versioned file
37
 
 
38
 
  bzr status         summarize changes in working copy
39
 
  bzr diff           show detailed diffs
40
 
 
41
 
  bzr merge          pull in changes from another branch
42
 
  bzr commit         save some or all changes
43
 
 
44
 
  bzr log            show history of changes
45
 
  bzr check          validate storage
46
 
 
47
 
  bzr help init      more help on e.g. init command
48
 
  bzr help commands  list all commands
49
 
"""
50
 
 
51
 
 
52
 
import sys
53
 
 
54
 
 
55
 
def help(topic=None, outfile = None):
 
27
from bzrlib import (
 
28
    help_topics,
 
29
    osutils,
 
30
    )
 
31
 
 
32
 
 
33
def help(topic=None, outfile=None):
 
34
    """Write the help for the specific topic to outfile"""
56
35
    if outfile is None:
57
36
        outfile = sys.stdout
 
37
 
58
38
    if topic is None:
59
 
        outfile.write(global_help)
60
 
    elif topic == 'commands':
61
 
        help_commands(outfile = outfile)
 
39
        topic = 'basic'
 
40
 
 
41
    if topic in help_topics.topic_registry:
 
42
        txt = help_topics.topic_registry.get_detail(topic)
 
43
        outfile.write(txt)
62
44
    else:
63
 
        help_on_command(topic, outfile = outfile)
 
45
        help_on_command(topic, outfile=outfile)
64
46
 
65
47
 
66
48
def command_usage(cmd_object):
111
93
    if doc is None:
112
94
        raise NotImplementedError("sorry, no detailed help yet for %r" % cmdname)
113
95
 
114
 
    print >>outfile, 'usage:', command_usage(cmd_object) 
 
96
    print >>outfile, 'usage:', command_usage(cmd_object)
115
97
 
116
98
    if cmd_object.aliases:
117
99
        print >>outfile, 'aliases:',
138
120
 
139
121
def help_commands(outfile=None):
140
122
    """List all commands"""
 
123
    if outfile is None:
 
124
        outfile = sys.stdout
 
125
    outfile.write(_help_commands_to_text('commands'))
 
126
 
 
127
 
 
128
def _help_commands_to_text(topic):
 
129
    """Generate the help text for the list of commands"""
141
130
    from bzrlib.commands import (builtin_command_names,
142
131
                                 plugin_command_names,
143
132
                                 get_cmd_object)
144
 
 
145
 
    if outfile is None:
146
 
        outfile = sys.stdout
147
 
 
148
 
    names = set()                       # to eliminate duplicates
149
 
    names.update(builtin_command_names())
 
133
    out = []
 
134
 
 
135
    names = set(builtin_command_names()) # to eliminate duplicates
150
136
    names.update(plugin_command_names())
151
 
    names = list(names)
152
 
    names.sort()
153
 
 
154
 
    for cmd_name in names:
155
 
        cmd_object = get_cmd_object(cmd_name)
156
 
        if cmd_object.hidden:
157
 
            continue
158
 
        print >>outfile, command_usage(cmd_object)
159
 
 
 
137
    commands = ((n, get_cmd_object(n)) for n in names)
 
138
    shown_commands = [(n, o) for n, o in commands if not o.hidden]
 
139
    max_name = max(len(n) for n, o in shown_commands)
 
140
    indent = ' ' * (max_name + 1)
 
141
    width = osutils.terminal_width() - 1
 
142
 
 
143
    for cmd_name, cmd_object in sorted(shown_commands):
160
144
        plugin_name = cmd_object.plugin_name()
161
 
        print_command_plugin(cmd_object, outfile, '        %s\n')
 
145
        if plugin_name is None:
 
146
            plugin_name = ''
 
147
        else:
 
148
            plugin_name = ' [%s]' % plugin_name
162
149
 
163
150
        cmd_help = cmd_object.help()
164
151
        if cmd_help:
165
152
            firstline = cmd_help.split('\n', 1)[0]
166
 
            print >>outfile, '        ' + firstline
167
 
        
 
153
        else:
 
154
            firstline = ''
 
155
        helpstring = '%-*s %s%s' % (max_name, cmd_name, firstline, plugin_name)
 
156
        lines = textwrap.wrap(helpstring, subsequent_indent=indent,
 
157
                              width=width)
 
158
        for line in lines:
 
159
            out.append(line + '\n')
 
160
    return ''.join(out)
 
161
 
 
162
 
 
163
help_topics.topic_registry.register("commands",
 
164
                                    _help_commands_to_text,
 
165
                                    "Basic help for all commands")