/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
6622.2.1 by Jelmer Vernooij
bzr => brz in docs, explain fork.
17
"""man.py - create man page from built-in brz help and static text
1551.3.11 by Aaron Bentley
Merge from Robert
18
19
TODO:
6622.2.1 by Jelmer Vernooij
bzr => brz in docs, explain fork.
20
  * use usage information instead of simple "brz foo" in COMMAND OVERVIEW
1551.3.11 by Aaron Bentley
Merge from Robert
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
29
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
30
import breezy
31
import breezy.help
32
import breezy.help_topics
33
import breezy.commands
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
34
from breezy.doc_generate import get_autodoc_datetime
1551.3.11 by Aaron Bentley
Merge from Robert
35
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
36
from breezy.plugin import load_plugins
6498.4.1 by Jelmer Vernooij
Document launchpad plugin commands in manual page.
37
load_plugins()
38
1551.3.11 by Aaron Bentley
Merge from Robert
39
40
def get_filename(options):
41
    """Provides name of manpage"""
6622.1.18 by Jelmer Vernooij
Rename some windows stuff.
42
    return "%s.1" % (options.brz_name)
1551.3.11 by Aaron Bentley
Merge from Robert
43
44
45
def infogen(options, outfile):
46
    """Assembles a man page"""
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
47
    d = get_autodoc_datetime()
1551.3.11 by Aaron Bentley
Merge from Robert
48
    params = \
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
49
           { "brzcmd": options.brz_name,
50
             "datestamp": d.strftime("%Y-%m-%d"),
51
             "timestamp": d.strftime("%Y-%m-%d %H:%M:%S +0000"),
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
52
             "version": breezy.__version__,
1551.3.11 by Aaron Bentley
Merge from Robert
53
             }
54
    outfile.write(man_preamble % params)
55
    outfile.write(man_escape(man_head % params))
56
    outfile.write(man_escape(getcommand_list(params)))
57
    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.
58
    outfile.write("".join(environment_variables()))
1551.3.11 by Aaron Bentley
Merge from Robert
59
    outfile.write(man_escape(man_foot % params))
1185.74.4 by James Blackwell
Give long help with command on man page
60
1185.75.1 by Hans Ulrich Niedermann
Start implementing general doc generation plan:
61
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
62
def man_escape(string):
1551.3.11 by Aaron Bentley
Merge from Robert
63
    """Escapes strings for man page compatibility"""
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
64
    result = string.replace("\\", "\\\\")
65
    result = result.replace("`", "\\'")
66
    result = result.replace("'", "\\*(Aq")
67
    result = result.replace("-", "\\-")
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
68
    return result
1185.75.1 by Hans Ulrich Niedermann
Start implementing general doc generation plan:
69
70
1551.3.11 by Aaron Bentley
Merge from Robert
71
def command_name_list():
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
72
    """Builds a list of command names from breezy"""
73
    command_names = breezy.commands.builtin_command_names()
74
    for cmdname in breezy.commands.plugin_command_names():
75
        cmd_object = breezy.commands.get_cmd_object(cmdname)
6498.4.1 by Jelmer Vernooij
Document launchpad plugin commands in manual page.
76
        if (PLUGINS_TO_DOCUMENT is None or
6498.4.3 by Jelmer Vernooij
Use Command.plugin_name().
77
            cmd_object.plugin_name() in PLUGINS_TO_DOCUMENT):
6498.4.1 by Jelmer Vernooij
Document launchpad plugin commands in manual page.
78
            command_names.append(cmdname)
1551.3.11 by Aaron Bentley
Merge from Robert
79
    command_names.sort()
80
    return command_names
81
82
83
def getcommand_list (params):
84
    """Builds summary help for command names in manpage format"""
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
85
    brzcmd = params["brzcmd"]
1551.3.11 by Aaron Bentley
Merge from Robert
86
    output = '.SH "COMMAND OVERVIEW"\n'
87
    for cmd_name in command_name_list():
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
88
        cmd_object = breezy.commands.get_cmd_object(cmd_name)
1551.3.11 by Aaron Bentley
Merge from Robert
89
        if cmd_object.hidden:
90
            continue
91
        cmd_help = cmd_object.help()
92
        if cmd_help:
93
            firstline = cmd_help.split('\n', 1)[0]
2432.1.33 by Robert Collins
Fix tests broken by deprecation of help.command_usage.
94
            usage = cmd_object._usage()
1551.3.11 by Aaron Bentley
Merge from Robert
95
            tmp = '.TP\n.B "%s"\n%s\n' % (usage, firstline)
96
            output = output + tmp
1185.75.1 by Hans Ulrich Niedermann
Start implementing general doc generation plan:
97
        else:
6619.3.11 by Jelmer Vernooij
Use modern exceptions.
98
            raise RuntimeError("Command '%s' has no help text" % (cmd_name))
1551.3.11 by Aaron Bentley
Merge from Robert
99
    return output
100
101
102
def getcommand_help(params):
6622.2.1 by Jelmer Vernooij
bzr => brz in docs, explain fork.
103
    """Shows individual options for a brz command"""
1551.3.11 by Aaron Bentley
Merge from Robert
104
    output='.SH "COMMAND REFERENCE"\n'
4056.4.1 by James Westby
Explicitly list aliases in the manpage as commands that can be executed.
105
    formatted = {}
1551.3.11 by Aaron Bentley
Merge from Robert
106
    for cmd_name in command_name_list():
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
107
        cmd_object = breezy.commands.get_cmd_object(cmd_name)
1551.3.11 by Aaron Bentley
Merge from Robert
108
        if cmd_object.hidden:
109
            continue
4056.4.1 by James Westby
Explicitly list aliases in the manpage as commands that can be executed.
110
        formatted[cmd_name] = format_command(params, cmd_object)
111
        for alias in cmd_object.aliases:
112
            formatted[alias] = format_alias(params, alias, cmd_name)
4056.4.2 by James Westby
Tweaks from review by Ian.
113
    for cmd_name in sorted(formatted):
114
        output += formatted[cmd_name]
1551.3.11 by Aaron Bentley
Merge from Robert
115
    return output
116
117
6498.4.3 by Jelmer Vernooij
Use Command.plugin_name().
118
def format_command(params, cmd):
1551.3.11 by Aaron Bentley
Merge from Robert
119
    """Provides long help for each public command"""
2432.1.33 by Robert Collins
Fix tests broken by deprecation of help.command_usage.
120
    subsection_header = '.SS "%s"\n' % (cmd._usage())
1551.3.11 by Aaron Bentley
Merge from Robert
121
    doc = "%s\n" % (cmd.__doc__)
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
122
    doc = breezy.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
123
6503.1.1 by Jelmer Vernooij
Prevent lines starting with a dot to accidentally be interpreted as a roff macro.
124
    # A dot at the beginning of a line is interpreted as a macro.
125
    # Simply join lines that begin with a dot with the previous
126
    # line to work around this.
127
    doc = doc.replace("\n.", ".")
128
1551.3.11 by Aaron Bentley
Merge from Robert
129
    option_str = ""
130
    options = cmd.options()
131
    if options:
132
        option_str = "\nOptions:\n"
133
        for option_name, option in sorted(options.items()):
1857.1.14 by Aaron Bentley
Fix man page generation
134
            for name, short_name, argname, help in option.iter_switches():
1551.18.12 by Aaron Bentley
Man page doesn't list hidden options (#131667)
135
                if option.is_hidden(name):
136
                    continue
1857.1.14 by Aaron Bentley
Fix man page generation
137
                l = '    --' + name
138
                if argname is not None:
139
                    l += ' ' + argname
140
                if short_name:
141
                    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)
142
                l += (30 - len(l)) * ' ' + (help or '')
1857.1.14 by Aaron Bentley
Fix man page generation
143
                wrapped = textwrap.fill(l, initial_indent='',
4070.11.2 by Martin Pool
Ask textwrap not to break long words or on hyphens
144
                    subsequent_indent=30*' ',
145
                    break_long_words=False,
4070.11.5 by Martin Pool
textwrap break_on_hyphens option is not available in python2.5
146
                    )
6498.4.3 by Jelmer Vernooij
Use Command.plugin_name().
147
                option_str += wrapped + '\n'
1861.3.2 by Alexander Belchenko
bzr.1 man page: show aliases for commands; fixed description of bazaar.conf
148
149
    aliases_str = ""
150
    if cmd.aliases:
151
        if len(cmd.aliases) > 1:
152
            aliases_str += '\nAliases: '
153
        else:
154
            aliases_str += '\nAlias: '
155
        aliases_str += ', '.join(cmd.aliases)
156
        aliases_str += '\n'
157
2425.2.4 by Robert Collins
Update the doc_generate logic to include see-also help topics.
158
    see_also_str = ""
159
    see_also = cmd.get_see_also()
160
    if see_also:
161
        see_also_str += '\nSee also: '
162
        see_also_str += ', '.join(see_also)
163
        see_also_str += '\n'
164
165
    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:
166
167
4056.4.1 by James Westby
Explicitly list aliases in the manpage as commands that can be executed.
168
def format_alias(params, alias, cmd_name):
6622.2.1 by Jelmer Vernooij
bzr => brz in docs, explain fork.
169
    help = '.SS "brz %s"\n' % alias
170
    help += 'Alias for "%s", see "brz %s".\n' % (cmd_name, cmd_name)
4056.4.1 by James Westby
Explicitly list aliases in the manpage as commands that can be executed.
171
    return help
172
173
6503.2.2 by Jelmer Vernooij
Generate ENVIRONMENT section in manpage from environment variable list in bzrlib.help_topics.
174
def environment_variables():
175
    yield ".SH \"ENVIRONMENT\"\n"
176
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
177
    from breezy.help_topics import known_env_variables
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
178
    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.
179
        yield ".TP\n"
180
        yield ".I \"%s\"\n" % k
181
        yield man_escape(desc) + "\n"
182
183
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
184
man_preamble = """\
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
185
.\\\"Man page for Breezy (%(brzcmd)s)
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
186
.\\\"
187
.\\\" Large parts of this file are autogenerated from the output of
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
188
.\\\"     \"%(brzcmd)s help commands\"
189
.\\\"     \"%(brzcmd)s help <cmd>\"
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
190
.\\\"
6498.2.1 by Jelmer Vernooij
Properly format apostrophes in manual page.
191
192
.ie \\n(.g .ds Aq \\(aq
193
.el .ds Aq '
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
194
"""
195
1551.3.11 by Aaron Bentley
Merge from Robert
196
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
197
man_head = """\
6622.2.1 by Jelmer Vernooij
bzr => brz in docs, explain fork.
198
.TH brz 1 "%(datestamp)s" "%(version)s" "Breezy"
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
199
.SH "NAME"
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
200
%(brzcmd)s - Breezy next-generation distributed version control
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
201
.SH "SYNOPSIS"
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
202
.B "%(brzcmd)s"
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
203
.I "command"
204
[
205
.I "command_options"
206
]
207
.br
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
208
.B "%(brzcmd)s"
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
209
.B "help"
210
.br
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
211
.B "%(brzcmd)s"
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
212
.B "help"
213
.I "command"
214
.SH "DESCRIPTION"
6015.8.1 by Martin Pool
Mention GNU and improve phrasing of the start of the man page.
215
6639.1.1 by Jelmer Vernooij
Support the SOURCE_DATE_EPOCH environment variable.
216
Breezy (or %(brzcmd)s) is a distributed version control system that is powerful,
6622.2.1 by Jelmer Vernooij
bzr => brz in docs, explain fork.
217
friendly, and scalable.  Breezy is a fork of the Bazaar version control system.
6015.8.1 by Martin Pool
Mention GNU and improve phrasing of the start of the man page.
218
6622.2.1 by Jelmer Vernooij
bzr => brz in docs, explain fork.
219
Breezy keeps track of changes to software source code (or similar information);
6015.8.1 by Martin Pool
Mention GNU and improve phrasing of the start of the man page.
220
lets you explore who changed it, when, and why; merges concurrent changes; and
221
helps people work together in a team.
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
222
"""
223
224
man_foot = """\
225
.SH "FILES"
226
.TP
6740.1.1 by Jelmer Vernooij
Rename bazaar.conf to breezy.conf.
227
.I "~/.config/breezy/breezy.conf"
2374.1.1 by Ian Clatworthy
Help and man page fixes
228
Contains the user's default configuration. The section
1551.3.11 by Aaron Bentley
Merge from Robert
229
.B [DEFAULT]
1861.2.14 by Alexander Belchenko
generate_docs (man/rstx): fixed description of configuration file
230
is used to define general configuration that will be applied everywhere.
231
The section
232
.B [ALIASES]
233
can be used to create command aliases for
234
commonly used options.
235
236
A typical config file might look something like:
237
238
.br
239
[DEFAULT]
240
.br
241
email=John Doe <jdoe@isp.com>
242
.br
243
[ALIASES]
244
.br
245
commit = commit --strict
246
.br
247
log10 = log --short -r -10..-1
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
248
.SH "SEE ALSO"
6650.1.1 by Jelmer Vernooij
Update homepage URL.
249
.UR https://www.breezy-vcs.org/
250
.BR https://www.breezy-vcs.org/
635 by Martin Pool
- manpage generator by Hans Ulrich Niedermann
251
"""
252