~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/help.py

  • Committer: Patch Queue Manager
  • Date: 2016-04-21 04:10:52 UTC
  • mfrom: (6616.1.1 fix-en-user-guide)
  • Revision ID: pqm@pqm.ubuntu.com-20160421041052-clcye7ns1qcl2n7w
(richard-wilbur) Ensure build of English use guide always uses English text
 even when user's locale specifies a different language. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2004, 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2005-2011 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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
 
 
17
from __future__ import absolute_import
16
18
 
17
19
# TODO: Some way to get a list of external commands (defined by shell
18
20
# scripts) so that they can be included in the help listing as well.
22
24
# TODO: `help commands --all` should show hidden commands
23
25
 
24
26
import sys
25
 
import textwrap
26
27
 
27
28
from bzrlib import (
28
29
    commands as _mod_commands,
30
31
    help_topics,
31
32
    osutils,
32
33
    plugin,
33
 
    symbol_versioning,
 
34
    ui,
 
35
    utextwrap,
34
36
    )
35
37
 
36
38
 
37
39
def help(topic=None, outfile=None):
38
40
    """Write the help for the specific topic to outfile"""
39
41
    if outfile is None:
40
 
        outfile = sys.stdout
 
42
        outfile = ui.ui_factory.make_output_stream()
41
43
 
42
44
    indices = HelpIndices()
43
45
 
45
47
    try:
46
48
        topics = indices.search(topic)
47
49
        shadowed_terms = []
48
 
        for index, topic in topics[1:]:
 
50
        for index, topic_obj in topics[1:]:
49
51
            shadowed_terms.append('%s%s' % (index.prefix,
50
 
                topic.get_help_topic()))
51
 
        outfile.write(topics[0][1].get_help_text(shadowed_terms))
 
52
                topic_obj.get_help_topic()))
 
53
        source = topics[0][1]
 
54
        outfile.write(source.get_help_text(shadowed_terms))
52
55
    except errors.NoHelpTopic:
53
56
        if alias is None:
54
57
            raise
61
64
def help_commands(outfile=None):
62
65
    """List all commands"""
63
66
    if outfile is None:
64
 
        outfile = sys.stdout
 
67
        outfile = ui.ui_factory.make_output_stream()
65
68
    outfile.write(_help_commands_to_text('commands'))
66
69
 
67
70
 
72
75
        hidden = True
73
76
    else:
74
77
        hidden = False
75
 
    names = set(_mod_commands.builtin_command_names()) # to eliminate duplicates
76
 
    names.update(_mod_commands.plugin_command_names())
 
78
    names = list(_mod_commands.all_command_names())
77
79
    commands = ((n, _mod_commands.get_cmd_object(n)) for n in names)
78
80
    shown_commands = [(n, o) for n, o in commands if o.hidden == hidden]
79
81
    max_name = max(len(n) for n, o in shown_commands)
80
82
    indent = ' ' * (max_name + 1)
81
 
    width = osutils.terminal_width() - 1
 
83
    width = osutils.terminal_width()
 
84
    if width is None:
 
85
        width = osutils.default_terminal_width
 
86
    # we need one extra space for terminals that wrap on last char
 
87
    width = width - 1
82
88
 
83
89
    for cmd_name, cmd_object in sorted(shown_commands):
84
90
        plugin_name = cmd_object.plugin_name()
93
99
        else:
94
100
            firstline = ''
95
101
        helpstring = '%-*s %s%s' % (max_name, cmd_name, firstline, plugin_name)
96
 
        lines = textwrap.wrap(helpstring, subsequent_indent=indent,
97
 
                              width=width)
 
102
        lines = utextwrap.wrap(
 
103
            helpstring, subsequent_indent=indent,
 
104
            width=width,
 
105
            break_long_words=False)
98
106
        for line in lines:
99
107
            out.append(line + '\n')
100
108
    return ''.join(out)
112
120
 
113
121
class HelpIndices(object):
114
122
    """Maintainer of help topics across multiple indices.
115
 
    
 
123
 
116
124
    It is currently separate to the HelpTopicRegistry because of its ordered
117
125
    nature, but possibly we should instead structure it as a search within the
118
126
    registry and add ordering and searching facilities to the registry. The
130
138
            help_topics.HelpTopicIndex(),
131
139
            _mod_commands.HelpCommandIndex(),
132
140
            plugin.PluginsHelpIndex(),
 
141
            help_topics.ConfigOptionHelpIndex(),
133
142
            ]
134
143
 
135
144
    def _check_prefix_uniqueness(self):
143
152
 
144
153
    def search(self, topic):
145
154
        """Search for topic across the help search path.
146
 
        
 
155
 
147
156
        :param topic: A string naming the help topic to search for.
148
157
        :raises: NoHelpTopic if none of the indexs in search_path have topic.
149
158
        :return: A list of HelpTopics which matched 'topic'.