1
# Copyright 2005 Canonical Ltd.
1
# Copyright (C) 2005-2010 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
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
# GNU General Public License for more details.
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
17
17
"""man.py - create man page from built-in bzr help and static text
50
56
outfile.write(man_escape(man_head % params))
51
57
outfile.write(man_escape(getcommand_list(params)))
52
58
outfile.write(man_escape(getcommand_help(params)))
59
outfile.write("".join(environment_variables()))
53
60
outfile.write(man_escape(man_foot % params))
56
63
def man_escape(string):
57
64
"""Escapes strings for man page compatibility"""
58
65
result = string.replace("\\","\\\\")
59
result = result.replace("`","\\`")
60
result = result.replace("'","\\'")
66
result = result.replace("`","\\'")
67
result = result.replace("'","\\*(Aq")
61
68
result = result.replace("-","\\-")
91
103
def getcommand_help(params):
92
104
"""Shows individual options for a bzr command"""
93
105
output='.SH "COMMAND REFERENCE"\n'
94
107
for cmd_name in command_name_list():
95
108
cmd_object = bzrlib.commands.get_cmd_object(cmd_name)
96
109
if cmd_object.hidden:
98
output = output + format_command(params, cmd_object)
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]
102
def format_command (params, cmd):
119
def format_command(params, cmd):
103
120
"""Provides long help for each public command"""
104
subsection_header = '.SS "%s"\n' % (bzrlib.help.command_usage(cmd))
121
subsection_header = '.SS "%s"\n' % (cmd._usage())
105
122
doc = "%s\n" % (cmd.__doc__)
106
docsplit = cmd.__doc__.split('\n')
107
doc = '\n'.join([docsplit[0]] + [line[4:] for line in docsplit[1:]])
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.", ".")
109
131
options = cmd.options()
111
133
option_str = "\nOptions:\n"
112
134
for option_name, option in sorted(options.items()):
113
l = ' --' + option_name
114
if option.type is not None:
115
l += ' ' + option.argname.upper()
116
short_name = option.short_name()
118
assert len(short_name) == 1
119
l += ', -' + short_name
120
l += (30 - len(l)) * ' ' + option.help
121
# TODO: Split help over multiple lines with
122
# correct indenting and wrapping.
123
wrapped = textwrap.fill(l, initial_indent='',
124
subsequent_indent=30*' ')
125
option_str = option_str + wrapped + '\n'
126
return subsection_header + option_str + "\n" + doc + "\n"
135
for name, short_name, argname, help in option.iter_switches():
136
if option.is_hidden(name):
139
if argname is not None:
142
l += ', -' + short_name
143
l += (30 - len(l)) * ' ' + (help or '')
144
wrapped = textwrap.fill(l, initial_indent='',
145
subsequent_indent=30*' ',
146
break_long_words=False,
148
option_str += wrapped + '\n'
152
if len(cmd.aliases) > 1:
153
aliases_str += '\nAliases: '
155
aliases_str += '\nAlias: '
156
aliases_str += ', '.join(cmd.aliases)
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"
129
185
man_preamble = """\
130
Man page for %(bzrcmd)s (bazaar-ng)
186
.\\\"Man page for Bazaar (%(bzrcmd)s)
132
188
.\\\" Large parts of this file are autogenerated from the output of
133
189
.\\\" \"%(bzrcmd)s help commands\"
158
217
.SH "DESCRIPTION"
161
) is a project of Canonical to develop an open source distributed version control system that is powerful, friendly, and scalable. Version control means a system that keeps track of previous revisions of software source code or similar information and helps people work on it in teams.
219
Bazaar (or %(bzrcmd)s) is a distributed version control system that is powerful,
220
friendly, and scalable. Bazaar is a project of Canonical Ltd and part of
221
the GNU Project to develop a free operating system.
223
Bazaar keeps track of changes to software source code (or similar information);
224
lets you explore who changed it, when, and why; merges concurrent changes; and
225
helps people work together in a team.
170
is to look for external command.
173
E-Mail address of the user. Overrides default user config.
176
E-Mail address of the user. Overriddes default user config.
179
.I "~/.bazaar/bazaar.conf/"
180
Contains the default user config. Only one section, [DEFAULT] is allowed. A
181
typical default config file may be similiar to:
231
.I "~/.bazaar/bazaar.conf"
232
Contains the user's default configuration. The section
186
.B email=John Doe <jdoe@isp.com>
234
is used to define general configuration that will be applied everywhere.
237
can be used to create command aliases for
238
commonly used options.
240
A typical config file might look something like:
245
email=John Doe <jdoe@isp.com>
249
commit = commit --strict
251
log10 = log --short -r -10..-1
188
.UR http://www.bazaar-vcs.org/
189
.BR http://www.bazaar-vcs.org/
253
.UR http://bazaar.canonical.com/
254
.BR http://bazaar.canonical.com/