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