~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/help.py

(jameinel) Allow 'bzr serve' to interpret SIGHUP as a graceful shutdown.
 (bug #795025) (John A Meinel)

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
16
 
17
17
# TODO: Some way to get a list of external commands (defined by shell
18
18
# scripts) so that they can be included in the help listing as well.
22
22
# TODO: `help commands --all` should show hidden commands
23
23
 
24
24
import sys
25
 
import textwrap
26
25
 
27
26
from bzrlib import (
28
27
    commands as _mod_commands,
30
29
    help_topics,
31
30
    osutils,
32
31
    plugin,
33
 
    symbol_versioning,
 
32
    utextwrap,
34
33
    )
35
34
 
36
35
 
45
44
    try:
46
45
        topics = indices.search(topic)
47
46
        shadowed_terms = []
48
 
        for index, topic in topics[1:]:
 
47
        for index, topic_obj in topics[1:]:
49
48
            shadowed_terms.append('%s%s' % (index.prefix,
50
 
                topic.get_help_topic()))
51
 
        outfile.write(topics[0][1].get_help_text(shadowed_terms))
 
49
                topic_obj.get_help_topic()))
 
50
        source = topics[0][1]
 
51
        outfile.write(source.get_help_text(shadowed_terms))
52
52
    except errors.NoHelpTopic:
53
53
        if alias is None:
54
54
            raise
72
72
        hidden = True
73
73
    else:
74
74
        hidden = False
75
 
    names = set(_mod_commands.builtin_command_names()) # to eliminate duplicates
76
 
    names.update(_mod_commands.plugin_command_names())
 
75
    names = list(_mod_commands.all_command_names())
77
76
    commands = ((n, _mod_commands.get_cmd_object(n)) for n in names)
78
77
    shown_commands = [(n, o) for n, o in commands if o.hidden == hidden]
79
78
    max_name = max(len(n) for n, o in shown_commands)
80
79
    indent = ' ' * (max_name + 1)
81
 
    width = osutils.terminal_width() - 1
 
80
    width = osutils.terminal_width()
 
81
    if width is None:
 
82
        width = osutils.default_terminal_width
 
83
    # we need one extra space for terminals that wrap on last char
 
84
    width = width - 1
82
85
 
83
86
    for cmd_name, cmd_object in sorted(shown_commands):
84
87
        plugin_name = cmd_object.plugin_name()
93
96
        else:
94
97
            firstline = ''
95
98
        helpstring = '%-*s %s%s' % (max_name, cmd_name, firstline, plugin_name)
96
 
        lines = textwrap.wrap(helpstring, subsequent_indent=indent,
97
 
                              width=width)
 
99
        lines = utextwrap.wrap(
 
100
            helpstring, subsequent_indent=indent,
 
101
            width=width,
 
102
            break_long_words=False)
98
103
        for line in lines:
99
104
            out.append(line + '\n')
100
105
    return ''.join(out)
112
117
 
113
118
class HelpIndices(object):
114
119
    """Maintainer of help topics across multiple indices.
115
 
    
 
120
 
116
121
    It is currently separate to the HelpTopicRegistry because of its ordered
117
122
    nature, but possibly we should instead structure it as a search within the
118
123
    registry and add ordering and searching facilities to the registry. The
130
135
            help_topics.HelpTopicIndex(),
131
136
            _mod_commands.HelpCommandIndex(),
132
137
            plugin.PluginsHelpIndex(),
 
138
            help_topics.ConfigOptionHelpIndex(),
133
139
            ]
134
140
 
135
141
    def _check_prefix_uniqueness(self):
143
149
 
144
150
    def search(self, topic):
145
151
        """Search for topic across the help search path.
146
 
        
 
152
 
147
153
        :param topic: A string naming the help topic to search for.
148
154
        :raises: NoHelpTopic if none of the indexs in search_path have topic.
149
155
        :return: A list of HelpTopics which matched 'topic'.