/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
4070.11.16 by Martin Pool
Fix copyrights and remove assert statement from doc_generate
1
# Copyright (C) 2006-2007 Canonical Ltd
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
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.
7
#
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
#
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
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
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
16
4927.2.2 by Ian Clatworthy
User Reference as topics
17
"""Generate reStructuredText source for the User Reference Manual.
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
18
Loosely based on the manpage generator autodoc_man.py.
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
19
2677.1.4 by Alexander Belchenko
fixes after John's review
20
Written by the Bazaar community.
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
21
"""
22
23
import os
24
import sys
25
import time
26
27
import bzrlib
28
import bzrlib.help
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
29
import bzrlib.help_topics
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
30
import bzrlib.commands
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
31
import bzrlib.osutils
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
32
33
4634.39.35 by Ian Clatworthy
put rules back in Makefile supporting plain-style docs
34
# Set this to True to generate a file per topic.
35
# This probably ought to be an option. The files probably
36
# ought to be prefixed with their section name as well so
37
# there's zero risk of clashing with a standard sphinx
38
# topic (like search.html).
4927.2.2 by Ian Clatworthy
User Reference as topics
39
FILE_PER_TOPIC = True
4634.39.35 by Ian Clatworthy
put rules back in Makefile supporting plain-style docs
40
41
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
42
def get_filename(options):
43
    """Provides name of manual"""
44
    return "%s_man.txt" % (options.bzr_name)
45
46
47
def infogen(options, outfile):
48
    """Create manual in RSTX format"""
49
    t = time.time()
50
    tt = time.gmtime(t)
51
    params = \
52
           { "bzrcmd": options.bzr_name,
53
             "datestamp": time.strftime("%Y-%m-%d",tt),
54
             "timestamp": time.strftime("%Y-%m-%d %H:%M:%S +0000",tt),
55
             "version": bzrlib.__version__,
56
             }
3089.3.17 by Ian Clatworthy
Fix case where filename not given
57
    nominated_filename = getattr(options, 'filename', None)
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
58
    if nominated_filename is None:
59
        topic_dir = None
60
    else:
61
        topic_dir = bzrlib.osutils.dirname(nominated_filename)
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
62
    outfile.write(rstx_preamble % params)
63
    outfile.write(rstx_head % params)
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
64
    outfile.write(_get_body(params, topic_dir))
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
65
    outfile.write(rstx_foot % params)
66
67
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
68
def _get_body(params, topic_dir):
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
69
    """Build the manual content."""
70
    from bzrlib.help_topics import SECT_CONCEPT, SECT_LIST, SECT_PLUGIN
71
    registry = bzrlib.help_topics.topic_registry
72
    result = []
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
73
    result.append(_get_section(registry, SECT_CONCEPT, "Concepts",
74
        output_dir=topic_dir))
75
    result.append(_get_section(registry, SECT_LIST, "Lists",
76
        output_dir=topic_dir))
4927.2.2 by Ian Clatworthy
User Reference as topics
77
    result.append(_get_commands_section(registry, output_dir=topic_dir))
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
78
    return "\n".join(result)
79
80
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
81
def _get_section(registry, section, title, hdg_level1="#", hdg_level2="=",
82
        output_dir=None):
83
    """Build the manual part from topics matching that section.
84
    
85
    If output_dir is not None, topics are dumped into text files there
86
    during processing, as well as being included in the return result.
87
    """
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
88
    lines = [title, hdg_level1 * len(title), ""]
4927.2.2 by Ian Clatworthy
User Reference as topics
89
    if FILE_PER_TOPIC:
90
        lines.extend([".. toctree::", "   :maxdepth: 1", ""])
2677.1.4 by Alexander Belchenko
fixes after John's review
91
92
    # docutils treats section heading as implicit link target.
93
    # But in some cases topic and heading are different, e.g.:
94
    #
95
    # `bugs' vs. `Bug Trackers'
96
    # `working-tree' vs. `Working Trees'
97
    #
98
    # So for building proper cross-reference between topic names
99
    # and corresponding sections in document, we need provide
100
    # simple glue in the form:
101
    #
102
    # .. _topic: `heading`_
103
    links_glue = []
104
4927.2.2 by Ian Clatworthy
User Reference as topics
105
    topics = sorted(registry.get_topics_for_section(section))
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
106
    for topic in topics:
107
        help = registry.get_detail(topic)
4927.2.2 by Ian Clatworthy
User Reference as topics
108
        heading, text = help.split("\n", 1)
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
109
        if not text.startswith(hdg_level2):
4927.2.2 by Ian Clatworthy
User Reference as topics
110
            underline = hdg_level2 * len(heading)
111
            help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
112
        else:
113
            help = "%s\n%s\n\n" % (heading, text)
114
        if FILE_PER_TOPIC:
115
            topic_id = _dump_text(output_dir, topic, help)
116
            lines.append("   %s" % topic_id)
117
        else:
118
            lines.append(help)
119
2677.1.4 by Alexander Belchenko
fixes after John's review
120
        # check that topic match heading
2677.1.2 by Alexander Belchenko
bzr_man: see also topics as cross-reference links
121
        if topic != heading.lower():
2677.1.4 by Alexander Belchenko
fixes after John's review
122
            links_glue.append((topic, heading))
123
124
    # provide links glue for topics that don't match headings
4927.2.2 by Ian Clatworthy
User Reference as topics
125
    #lines.append('')
126
    #lines.extend([".. _%s: `%s`_" % i for i in links_glue])
127
    #lines.append('')
2677.1.4 by Alexander Belchenko
fixes after John's review
128
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
129
    return "\n" + "\n".join(lines) + "\n"
130
131
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
132
def _get_commands_section(registry, title="Commands", hdg_level1="#",
4927.2.2 by Ian Clatworthy
User Reference as topics
133
        hdg_level2="=", output_dir=None):
3565.2.1 by Christophe Troestler
(trivial) Corrected typos.
134
    """Build the commands reference section of the manual."""
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
135
    lines = [title, hdg_level1 * len(title), ""]
4927.2.2 by Ian Clatworthy
User Reference as topics
136
    if FILE_PER_TOPIC:
137
        lines.extend([".. toctree::", "   :maxdepth: 1", ""])
138
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
139
    cmds = sorted(bzrlib.commands.builtin_command_names())
140
    for cmd_name in cmds:
141
        cmd_object = bzrlib.commands.get_cmd_object(cmd_name)
142
        if cmd_object.hidden:
143
            continue
144
        heading = cmd_name
4927.2.2 by Ian Clatworthy
User Reference as topics
145
        underline = hdg_level2 * len(heading)
2677.1.2 by Alexander Belchenko
bzr_man: see also topics as cross-reference links
146
        text = cmd_object.get_help_text(plain=False, see_also_as_links=True)
4927.2.2 by Ian Clatworthy
User Reference as topics
147
        help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
148
        if FILE_PER_TOPIC:
149
            topic_id = _dump_text(output_dir, cmd_name, help)
150
            lines.append("   %s" % topic_id)
151
        else:
152
            lines.append(help)
153
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
154
    return "\n" + "\n".join(lines) + "\n"
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
155
156
4927.2.2 by Ian Clatworthy
User Reference as topics
157
def _dump_text(output_dir, topic, text):
158
    """Dump text for a topic to a file."""
159
    topic_id = "%s-%s" % (topic, "help")
160
    filename = bzrlib.osutils.pathjoin(output_dir, topic_id + ".txt")
161
    f =  open(filename, "w")
162
    f.writelines(text)
163
    f.close()
164
    return topic_id
165
166
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
167
##
168
# TEMPLATES
169
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
170
rstx_preamble = """.. This file is autogenerated from the output of
171
..     %(bzrcmd)s help topics
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
172
..     %(bzrcmd)s help commands
173
..     %(bzrcmd)s help <cmd>
174
..
175
.. Generation time: %(timestamp)s
176
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
177
"""
178
179
180
rstx_head = """\
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
181
#####################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
182
Bazaar User Reference
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
183
#####################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
184
185
About This Manual
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
186
#################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
187
188
This manual is generated from Bazaar's online help. To use
189
the online help system, try the following commands.
190
191
    Introduction including a list of commonly used commands::
192
193
        bzr help
194
195
    List of topics and a summary of each::
196
197
        bzr help topics
198
199
    List of commands and a summary of each::
200
201
        bzr help commands
202
203
    More information about a particular topic or command::
204
205
        bzr help topic-or-command-name
206
207
The following web sites provide further information on Bazaar:
208
4927.2.2 by Ian Clatworthy
User Reference as topics
209
:Home page:                     http://bazaar.canonical.com/
210
:Official docs:                 http://doc.bazaar.canonical.com/
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
211
:Launchpad:                     https://launchpad.net/bzr/
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
212
"""
213
214
215
rstx_foot = """
216
"""