/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: Canonical.com Patch Queue Manager
  • Date: 2010-04-06 06:59:03 UTC
  • mfrom: (5051.5.1 subunit)
  • Revision ID: pqm@pqm.ubuntu.com-20100406065903-y9dxgwmog1pmw7dz
Use subunit when running tests in PQM.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2005-2010 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
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
from __future__ import absolute_import
18
 
 
19
17
# TODO: Some way to get a list of external commands (defined by shell
20
18
# scripts) so that they can be included in the help listing as well.
21
19
# It should be enough to just list the plugin directory and look for
24
22
# TODO: `help commands --all` should show hidden commands
25
23
 
26
24
import sys
 
25
import textwrap
27
26
 
28
 
from . import (
 
27
from bzrlib import (
29
28
    commands as _mod_commands,
30
29
    errors,
31
30
    help_topics,
32
31
    osutils,
33
32
    plugin,
34
 
    ui,
35
 
    utextwrap,
 
33
    symbol_versioning,
36
34
    )
37
35
 
38
36
 
39
 
class NoHelpTopic(errors.BzrError):
40
 
 
41
 
    _fmt = ("No help could be found for '%(topic)s'. "
42
 
        "Please use 'brz help topics' to obtain a list of topics.")
43
 
 
44
 
    def __init__(self, topic):
45
 
        self.topic = topic
46
 
 
47
 
 
48
37
def help(topic=None, outfile=None):
49
38
    """Write the help for the specific topic to outfile"""
50
39
    if outfile is None:
51
 
        outfile = ui.ui_factory.make_output_stream()
 
40
        outfile = sys.stdout
52
41
 
53
42
    indices = HelpIndices()
54
43
 
56
45
    try:
57
46
        topics = indices.search(topic)
58
47
        shadowed_terms = []
59
 
        for index, topic_obj in topics[1:]:
 
48
        for index, topic in topics[1:]:
60
49
            shadowed_terms.append('%s%s' % (index.prefix,
61
 
                topic_obj.get_help_topic()))
 
50
                topic.get_help_topic()))
62
51
        source = topics[0][1]
63
52
        outfile.write(source.get_help_text(shadowed_terms))
64
 
    except NoHelpTopic:
 
53
    except errors.NoHelpTopic:
65
54
        if alias is None:
66
55
            raise
67
56
 
68
57
    if alias is not None:
69
 
        outfile.write("'brz %s' is an alias for 'brz %s'.\n" % (topic,
 
58
        outfile.write("'bzr %s' is an alias for 'bzr %s'.\n" % (topic,
70
59
            " ".join(alias)))
71
60
 
72
61
 
73
62
def help_commands(outfile=None):
74
63
    """List all commands"""
75
64
    if outfile is None:
76
 
        outfile = ui.ui_factory.make_output_stream()
 
65
        outfile = sys.stdout
77
66
    outfile.write(_help_commands_to_text('commands'))
78
67
 
79
68
 
108
97
        else:
109
98
            firstline = ''
110
99
        helpstring = '%-*s %s%s' % (max_name, cmd_name, firstline, plugin_name)
111
 
        lines = utextwrap.wrap(
 
100
        lines = textwrap.wrap(
112
101
            helpstring, subsequent_indent=indent,
113
102
            width=width,
114
103
            break_long_words=False)
147
136
            help_topics.HelpTopicIndex(),
148
137
            _mod_commands.HelpCommandIndex(),
149
138
            plugin.PluginsHelpIndex(),
150
 
            help_topics.ConfigOptionHelpIndex(),
151
139
            ]
152
140
 
153
141
    def _check_prefix_uniqueness(self):
154
142
        """Ensure that the index collection is able to differentiate safely."""
155
 
        prefixes = set()
 
143
        prefixes = {}
156
144
        for index in self.search_path:
157
 
            prefix = index.prefix
158
 
            if prefix in prefixes:
 
145
            prefixes.setdefault(index.prefix, []).append(index)
 
146
        for prefix, indices in prefixes.items():
 
147
            if len(indices) > 1:
159
148
                raise errors.DuplicateHelpPrefix(prefix)
160
 
            prefixes.add(prefix)
161
149
 
162
150
    def search(self, topic):
163
151
        """Search for topic across the help search path.
171
159
        for index in self.search_path:
172
160
            result.extend([(index, _topic) for _topic in index.get_topics(topic)])
173
161
        if not result:
174
 
            raise NoHelpTopic(topic)
 
162
            raise errors.NoHelpTopic(topic)
175
163
        else:
176
164
            return result