1
# Copyright (C) 2005-2010 Canonical Ltd
1
# Copyright 2005 Canonical Ltd.
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
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
"""man.py - create man page from built-in bzr help and static text
21
21
* add command aliases
24
from __future__ import absolute_import
26
PLUGINS_TO_DOCUMENT = ["launchpad"]
33
import bzrlib.help_topics
34
31
import bzrlib.commands
36
from bzrlib.plugin import load_plugins
40
34
def get_filename(options):
41
35
"""Provides name of manpage"""
56
50
outfile.write(man_escape(man_head % params))
57
51
outfile.write(man_escape(getcommand_list(params)))
58
52
outfile.write(man_escape(getcommand_help(params)))
59
outfile.write("".join(environment_variables()))
60
53
outfile.write(man_escape(man_foot % params))
63
56
def man_escape(string):
64
57
"""Escapes strings for man page compatibility"""
65
58
result = string.replace("\\","\\\\")
66
result = result.replace("`","\\'")
67
result = result.replace("'","\\*(Aq")
59
result = result.replace("`","\\`")
60
result = result.replace("'","\\'")
68
61
result = result.replace("-","\\-")
72
65
def command_name_list():
73
66
"""Builds a list of command names from bzrlib"""
74
67
command_names = bzrlib.commands.builtin_command_names()
75
for cmdname in bzrlib.commands.plugin_command_names():
76
cmd_object = bzrlib.commands.get_cmd_object(cmdname)
77
if (PLUGINS_TO_DOCUMENT is None or
78
cmd_object.plugin_name() in PLUGINS_TO_DOCUMENT):
79
command_names.append(cmdname)
80
68
command_names.sort()
81
69
return command_names
92
80
cmd_help = cmd_object.help()
94
82
firstline = cmd_help.split('\n', 1)[0]
95
usage = cmd_object._usage()
83
usage = bzrlib.help.command_usage(cmd_object)
96
84
tmp = '.TP\n.B "%s"\n%s\n' % (usage, firstline)
97
85
output = output + tmp
103
91
def getcommand_help(params):
104
92
"""Shows individual options for a bzr command"""
105
93
output='.SH "COMMAND REFERENCE"\n'
107
94
for cmd_name in command_name_list():
108
95
cmd_object = bzrlib.commands.get_cmd_object(cmd_name)
109
96
if cmd_object.hidden:
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)
114
for cmd_name in sorted(formatted):
115
output += formatted[cmd_name]
98
output = output + format_command(params, cmd_object)
119
def format_command(params, cmd):
102
def format_command (params, cmd):
120
103
"""Provides long help for each public command"""
121
subsection_header = '.SS "%s"\n' % (cmd._usage())
104
subsection_header = '.SS "%s"\n' % (bzrlib.help.command_usage(cmd))
122
105
doc = "%s\n" % (cmd.__doc__)
123
doc = bzrlib.help_topics.help_as_plain_text(cmd.help())
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.", ".")
131
109
options = cmd.options()
133
111
option_str = "\nOptions:\n"
134
112
for option_name, option in sorted(options.items()):
135
113
for name, short_name, argname, help in option.iter_switches():
136
if option.is_hidden(name):
139
115
if argname is not None:
140
116
l += ' ' + argname
118
assert len(short_name) == 1
142
119
l += ', -' + short_name
143
l += (30 - len(l)) * ' ' + (help or '')
120
l += (30 - len(l)) * ' ' + help
121
# TODO: Split help over multiple lines with
122
# correct indenting and wrapping.
144
123
wrapped = textwrap.fill(l, initial_indent='',
145
subsequent_indent=30*' ',
146
break_long_words=False,
148
option_str += wrapped + '\n'
124
subsequent_indent=30*' ')
125
option_str = option_str + wrapped + '\n'
156
133
aliases_str += ', '.join(cmd.aliases)
157
134
aliases_str += '\n'
160
see_also = cmd.get_see_also()
162
see_also_str += '\nSee also: '
163
see_also_str += ', '.join(see_also)
166
return subsection_header + option_str + aliases_str + see_also_str + "\n" + doc + "\n"
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)
175
def environment_variables():
176
yield ".SH \"ENVIRONMENT\"\n"
178
from bzrlib.help_topics import known_env_variables
179
for k, desc in known_env_variables:
181
yield ".I \"%s\"\n" % k
182
yield man_escape(desc) + "\n"
136
return subsection_header + option_str + aliases_str + "\n" + doc + "\n"
185
139
man_preamble = """\
186
.\\\"Man page for Bazaar (%(bzrcmd)s)
140
Man page for Bazaar (%(bzrcmd)s)
188
142
.\\\" Large parts of this file are autogenerated from the output of
189
143
.\\\" \"%(bzrcmd)s help commands\"
190
144
.\\\" \"%(bzrcmd)s help <cmd>\"
193
.ie \\n(.g .ds Aq \\(aq
146
.\\\" Generation time: %(timestamp)s
199
152
.TH bzr 1 "%(datestamp)s" "%(version)s" "Bazaar"
201
%(bzrcmd)s - Bazaar next-generation distributed version control
154
Bazaar (%(bzrcmd)s) - next-generation distributed version control
215
168
.SH "DESCRIPTION"
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.
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.
169
Bazaar (or %(bzrcmd)s) is a project of Canonical to develop an open source
170
distributed version control system that is powerful, friendly, and scalable.
171
Version control means a system that keeps track of previous revisions
172
of software source code or similar information and helps people work on it in teams.
181
is to look for external command.
184
E-Mail address of the user. Overrides default user config.
187
E-Mail address of the user. Overriddes default user config.
190
Editor for editing commit messages
193
Editor for editing commit messages
196
Paths where bzr should look for plugins
199
Home directory for bzr
229
202
.I "~/.bazaar/bazaar.conf"
230
Contains the user's default configuration. The section
203
Contains the users default configuration. The section
232
205
is used to define general configuration that will be applied everywhere.
249
222
log10 = log --short -r -10..-1
251
.UR http://bazaar.canonical.com/
252
.BR http://bazaar.canonical.com/
224
.UR http://www.bazaar-vcs.org/
225
.BR http://www.bazaar-vcs.org/