/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
4988.10.3 by John Arbash Meinel
Merge bzr.dev 5007, resolve conflict, update NEWS
1
# Copyright (C) 2005-2010 Canonical Ltd
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
2
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
16
1551.3.11 by Aaron Bentley
Merge from Robert
17
"""man.py - create man page from built-in bzr help and static text
18
19
TODO:
20
  * use usage information instead of simple "bzr foo" in COMMAND OVERVIEW
21
  * add command aliases
22
"""
23
6379.6.7 by Jelmer Vernooij
Move importing from future until after doc string, otherwise the doc string will disappear.
24
from __future__ import absolute_import
25
6498.4.1 by Jelmer Vernooij
Document launchpad plugin commands in manual page.
26
PLUGINS_TO_DOCUMENT = ["launchpad"]
27
1551.3.11 by Aaron Bentley
Merge from Robert
28
import textwrap
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
29
import time
1551.3.11 by Aaron Bentley
Merge from Robert
30
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
31
import brzlib
32
import brzlib.help
33
import brzlib.help_topics
34
import brzlib.commands
35
import brzlib.osutils
1551.3.11 by Aaron Bentley
Merge from Robert
36
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
37
from brzlib.plugin import load_plugins
6498.4.1 by Jelmer Vernooij
Document launchpad plugin commands in manual page.
38
load_plugins()
39
1551.3.11 by Aaron Bentley
Merge from Robert
40
41
def get_filename(options):
42
    """Provides name of manpage"""
43
    return "%s.1" % (options.bzr_name)
44
45
46
def infogen(options, outfile):
47
    """Assembles a man page"""
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
48
    tt = brzlib.osutils.gmtime()
1551.3.11 by Aaron Bentley
Merge from Robert
49
    params = \
50
           { "bzrcmd": options.bzr_name,
51
             "datestamp": time.strftime("%Y-%m-%d",tt),
52
             "timestamp": time.strftime("%Y-%m-%d %H:%M:%S +0000",tt),
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
53
             "version": brzlib.__version__,
1551.3.11 by Aaron Bentley
Merge from Robert
54
             }
55
    outfile.write(man_preamble % params)
56
    outfile.write(man_escape(man_head % params))
57
    outfile.write(man_escape(getcommand_list(params)))
58
    outfile.write(man_escape(getcommand_help(params)))
6503.2.2 by Jelmer Vernooij
Generate ENVIRONMENT section in manpage from environment variable list in bzrlib.help_topics.
59
    outfile.write("".join(environment_variables()))
1551.3.11 by Aaron Bentley
Merge from Robert
60
    outfile.write(man_escape(man_foot % params))
1185.74.4 by James Blackwell
Give long help with command on man page
61
1185.75.1 by Hans Ulrich Niedermann
Start implementing general doc generation plan:
62
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
63
def man_escape(string):
1551.3.11 by Aaron Bentley
Merge from Robert
64
    """Escapes strings for man page compatibility"""
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
65
    result = string.replace("\\","\\\\")
6498.2.2 by Jelmer Vernooij
Fix accent grave generation.
66
    result = result.replace("`","\\'")
6498.2.1 by Jelmer Vernooij
Properly format apostrophes in manual page.
67
    result = result.replace("'","\\*(Aq")
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
68
    result = result.replace("-","\\-")
69
    return result
1185.75.1 by Hans Ulrich Niedermann
Start implementing general doc generation plan:
70
71
1551.3.11 by Aaron Bentley
Merge from Robert
72
def command_name_list():
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
73
    """Builds a list of command names from brzlib"""
74
    command_names = brzlib.commands.builtin_command_names()
75
    for cmdname in brzlib.commands.plugin_command_names():
76
        cmd_object = brzlib.commands.get_cmd_object(cmdname)
6498.4.1 by Jelmer Vernooij
Document launchpad plugin commands in manual page.
77
        if (PLUGINS_TO_DOCUMENT is None or
6498.4.3 by Jelmer Vernooij
Use Command.plugin_name().
78
            cmd_object.plugin_name() in PLUGINS_TO_DOCUMENT):
6498.4.1 by Jelmer Vernooij
Document launchpad plugin commands in manual page.
79
            command_names.append(cmdname)
1551.3.11 by Aaron Bentley
Merge from Robert
80
    command_names.sort()
81
    return command_names
82
83
84
def getcommand_list (params):
85
    """Builds summary help for command names in manpage format"""
86
    bzrcmd = params["bzrcmd"]
87
    output = '.SH "COMMAND OVERVIEW"\n'
88
    for cmd_name in command_name_list():
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
89
        cmd_object = brzlib.commands.get_cmd_object(cmd_name)
1551.3.11 by Aaron Bentley
Merge from Robert
90
        if cmd_object.hidden:
91
            continue
92
        cmd_help = cmd_object.help()
93
        if cmd_help:
94
            firstline = cmd_help.split('\n', 1)[0]
2432.1.33 by Robert Collins
Fix tests broken by deprecation of help.command_usage.
95
            usage = cmd_object._usage()
1551.3.11 by Aaron Bentley
Merge from Robert
96
            tmp = '.TP\n.B "%s"\n%s\n' % (usage, firstline)
97
            output = output + tmp
1185.75.1 by Hans Ulrich Niedermann
Start implementing general doc generation plan:
98
        else:
1551.3.11 by Aaron Bentley
Merge from Robert
99
            raise RuntimeError, "Command '%s' has no help text" % (cmd_name)
100
    return output
101
102
103
def getcommand_help(params):
104
    """Shows individual options for a bzr command"""
105
    output='.SH "COMMAND REFERENCE"\n'
4056.4.1 by James Westby
Explicitly list aliases in the manpage as commands that can be executed.
106
    formatted = {}
1551.3.11 by Aaron Bentley
Merge from Robert
107
    for cmd_name in command_name_list():
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
108
        cmd_object = brzlib.commands.get_cmd_object(cmd_name)
1551.3.11 by Aaron Bentley
Merge from Robert
109
        if cmd_object.hidden:
110
            continue
4056.4.1 by James Westby
Explicitly list aliases in the manpage as commands that can be executed.
111
        formatted[cmd_name] = format_command(params, cmd_object)
112
        for alias in cmd_object.aliases:
113
            formatted[alias] = format_alias(params, alias, cmd_name)
4056.4.2 by James Westby
Tweaks from review by Ian.
114
    for cmd_name in sorted(formatted):
115
        output += formatted[cmd_name]
1551.3.11 by Aaron Bentley
Merge from Robert
116
    return output
117
118
6498.4.3 by Jelmer Vernooij
Use Command.plugin_name().
119
def format_command(params, cmd):
1551.3.11 by Aaron Bentley
Merge from Robert
120
    """Provides long help for each public command"""
2432.1.33 by Robert Collins
Fix tests broken by deprecation of help.command_usage.
121
    subsection_header = '.SS "%s"\n' % (cmd._usage())
1551.3.11 by Aaron Bentley
Merge from Robert
122
    doc = "%s\n" % (cmd.__doc__)
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
123
    doc = brzlib.help_topics.help_as_plain_text(cmd.help())
1861.3.2 by Alexander Belchenko
bzr.1 man page: show aliases for commands; fixed description of bazaar.conf
124
6503.1.1 by Jelmer Vernooij
Prevent lines starting with a dot to accidentally be interpreted as a roff macro.
125
    # A dot at the beginning of a line is interpreted as a macro.
126
    # Simply join lines that begin with a dot with the previous
127
    # line to work around this.
128
    doc = doc.replace("\n.", ".")
129
1551.3.11 by Aaron Bentley
Merge from Robert
130
    option_str = ""
131
    options = cmd.options()
132
    if options:
133
        option_str = "\nOptions:\n"
134
        for option_name, option in sorted(options.items()):
1857.1.14 by Aaron Bentley
Fix man page generation
135
            for name, short_name, argname, help in option.iter_switches():
1551.18.12 by Aaron Bentley
Man page doesn't list hidden options (#131667)
136
                if option.is_hidden(name):
137
                    continue
1857.1.14 by Aaron Bentley
Fix man page generation
138
                l = '    --' + name
139
                if argname is not None:
140
                    l += ' ' + argname
141
                if short_name:
142
                    l += ', -' + short_name
2309.3.1 by bialix at ukr
Fix for selftest of man generator with instaled plugin 'htmllog' (no help for plugin's log formatter)
143
                l += (30 - len(l)) * ' ' + (help or '')
1857.1.14 by Aaron Bentley
Fix man page generation
144
                wrapped = textwrap.fill(l, initial_indent='',
4070.11.2 by Martin Pool
Ask textwrap not to break long words or on hyphens
145
                    subsequent_indent=30*' ',
146
                    break_long_words=False,
4070.11.5 by Martin Pool
textwrap break_on_hyphens option is not available in python2.5
147
                    )
6498.4.3 by Jelmer Vernooij
Use Command.plugin_name().
148
                option_str += wrapped + '\n'
1861.3.2 by Alexander Belchenko
bzr.1 man page: show aliases for commands; fixed description of bazaar.conf
149
150
    aliases_str = ""
151
    if cmd.aliases:
152
        if len(cmd.aliases) > 1:
153
            aliases_str += '\nAliases: '
154
        else:
155
            aliases_str += '\nAlias: '
156
        aliases_str += ', '.join(cmd.aliases)
157
        aliases_str += '\n'
158
2425.2.4 by Robert Collins
Update the doc_generate logic to include see-also help topics.
159
    see_also_str = ""
160
    see_also = cmd.get_see_also()
161
    if see_also:
162
        see_also_str += '\nSee also: '
163
        see_also_str += ', '.join(see_also)
164
        see_also_str += '\n'
165
166
    return subsection_header + option_str + aliases_str + see_also_str + "\n" + doc + "\n"
1185.75.1 by Hans Ulrich Niedermann
Start implementing general doc generation plan:
167
168
4056.4.1 by James Westby
Explicitly list aliases in the manpage as commands that can be executed.
169
def format_alias(params, alias, cmd_name):
170
    help = '.SS "bzr %s"\n' % alias
171
    help += 'Alias for "%s", see "bzr %s".\n' % (cmd_name, cmd_name)
172
    return help
173
174
6503.2.2 by Jelmer Vernooij
Generate ENVIRONMENT section in manpage from environment variable list in bzrlib.help_topics.
175
def environment_variables():
176
    yield ".SH \"ENVIRONMENT\"\n"
177
6622.1.1 by Jelmer Vernooij
Rename bzrlib => brzlib, bzr => brz.
178
    from brzlib.help_topics import known_env_variables
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
179
    for k, desc in known_env_variables:
6503.2.2 by Jelmer Vernooij
Generate ENVIRONMENT section in manpage from environment variable list in bzrlib.help_topics.
180
        yield ".TP\n"
181
        yield ".I \"%s\"\n" % k
182
        yield man_escape(desc) + "\n"
183
184
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
185
man_preamble = """\
3709.2.1 by David Futcher
Make the first line of the manpage preamble a comment again (#242106)
186
.\\\"Man page for Bazaar (%(bzrcmd)s)
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
187
.\\\"
188
.\\\" Large parts of this file are autogenerated from the output of
189
.\\\"     \"%(bzrcmd)s help commands\"
190
.\\\"     \"%(bzrcmd)s help <cmd>\"
191
.\\\"
6498.2.1 by Jelmer Vernooij
Properly format apostrophes in manual page.
192
193
.ie \\n(.g .ds Aq \\(aq
194
.el .ds Aq '
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
195
"""
196
1551.3.11 by Aaron Bentley
Merge from Robert
197
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
198
man_head = """\
1861.2.8 by Alexander Belchenko
More branding: bazaar-ng -> Bazaar; bazaar-ng.org -> bazaar-vcs.org
199
.TH bzr 1 "%(datestamp)s" "%(version)s" "Bazaar"
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
200
.SH "NAME"
4785.1.1 by John Ferlito
lexgrog doesn't like having "Bazaar (bzr)" as the nae of the command page
201
%(bzrcmd)s - Bazaar next-generation distributed version control
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
202
.SH "SYNOPSIS"
203
.B "%(bzrcmd)s"
204
.I "command"
205
[
206
.I "command_options"
207
]
208
.br
209
.B "%(bzrcmd)s"
210
.B "help"
211
.br
212
.B "%(bzrcmd)s"
213
.B "help"
214
.I "command"
215
.SH "DESCRIPTION"
6015.8.1 by Martin Pool
Mention GNU and improve phrasing of the start of the man page.
216
217
Bazaar (or %(bzrcmd)s) is a distributed version control system that is powerful, 
218
friendly, and scalable.  Bazaar is a project of Canonical Ltd and part of 
219
the GNU Project to develop a free operating system.
220
221
Bazaar keeps track of changes to software source code (or similar information);
222
lets you explore who changed it, when, and why; merges concurrent changes; and
223
helps people work together in a team.
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
224
"""
225
226
man_foot = """\
227
.SH "FILES"
228
.TP
1861.3.2 by Alexander Belchenko
bzr.1 man page: show aliases for commands; fixed description of bazaar.conf
229
.I "~/.bazaar/bazaar.conf"
2374.1.1 by Ian Clatworthy
Help and man page fixes
230
Contains the user's default configuration. The section
1551.3.11 by Aaron Bentley
Merge from Robert
231
.B [DEFAULT]
1861.2.14 by Alexander Belchenko
generate_docs (man/rstx): fixed description of configuration file
232
is used to define general configuration that will be applied everywhere.
233
The section
234
.B [ALIASES]
235
can be used to create command aliases for
236
commonly used options.
237
238
A typical config file might look something like:
239
240
.br
241
[DEFAULT]
242
.br
243
email=John Doe <jdoe@isp.com>
244
.br
245
[ALIASES]
246
.br
247
commit = commit --strict
248
.br
249
log10 = log --short -r -10..-1
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
250
.SH "SEE ALSO"
5050.47.1 by Martin Pool
Backport fix for bad url in bzr help
251
.UR http://bazaar.canonical.com/
252
.BR http://bazaar.canonical.com/
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
253
"""
254