/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6059.3.1 by Vincent Ladeuil
Provide per-config option help
1
# Copyright (C) 2006-2011 Canonical Ltd
2023.1.2 by ghigo
add help topics module
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.
12
#
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
2023.1.2 by ghigo
add help topics module
16
6622.1.30 by Jelmer Vernooij
Some more test fixes.
17
"""A collection of extra help information for using brz.
2023.1.2 by ghigo
add help topics module
18
19
Help topics are meant to be help for items that aren't commands, but will
6622.1.30 by Jelmer Vernooij
Some more test fixes.
20
help brz become fully learnable without referring to a tutorial.
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
21
22
Limited formatting of help text is permitted to make the text useful
23
both within the reference manual (reStructuredText) and on the screen.
24
The help text should be reStructuredText with formatting kept to a
25
minimum and, in particular, no headings. The onscreen renderer applies
26
the following simple rules before rendering the text:
27
28
    1. A '::' appearing on the end of a line is replaced with ':'.
29
    2. Lines starting with a ':' have it stripped.
30
31
These rules mean that literal blocks and field lists respectively can
32
be used in the help text, producing sensible input to a manual while
33
rendering on the screen naturally.
2023.1.2 by ghigo
add help topics module
34
"""
35
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
36
import breezy
37
from breezy import (
6059.3.1 by Vincent Ladeuil
Provide per-config option help
38
    config,
3087.2.4 by Alexander Belchenko
Help topics can now be loaded from files (based on Ian's patch, adapted to proper support various windows installers).
39
    osutils,
40
    registry,
6110.7.1 by Jonathan Riddell
add topic help to translations
41
    i18n,
3087.2.4 by Alexander Belchenko
Help topics can now be loaded from files (based on Ian's patch, adapted to proper support various windows installers).
42
    )
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
43
6110.7.4 by Jonathan Riddell
fix spacing
44
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
45
# Section identifiers (map topics to the right place in the manual)
46
SECT_COMMAND = "command"
47
SECT_CONCEPT = "concept"
7143.15.2 by Jelmer Vernooij
Run autopep8.
48
SECT_HIDDEN = "hidden"
49
SECT_LIST = "list"
50
SECT_PLUGIN = "plugin"
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
51
52
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
53
class HelpTopicRegistry(registry.Registry):
2070.4.15 by John Arbash Meinel
Fixes from Martin
54
    """A Registry customized for handling help topics."""
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
55
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
56
    def register(self, topic, detail, summary, section=SECT_LIST):
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
57
        """Register a new help topic.
58
59
        :param topic: Name of documentation entry
60
        :param detail: Function or string object providing detailed
61
            documentation for topic.  Function interface is detail(topic).
62
            This should return a text string of the detailed information.
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
63
            See the module documentation for details on help text formatting.
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
64
        :param summary: String providing single-line documentation for topic.
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
65
        :param section: Section in reference manual - see SECT_* identifiers.
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
66
        """
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
67
        # The detail is stored as the 'object' and the metadata as the info
6059.3.1 by Vincent Ladeuil
Provide per-config option help
68
        info = (summary, section)
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
69
        super(HelpTopicRegistry, self).register(topic, detail, info=info)
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
70
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
71
    def register_lazy(self, topic, module_name, member_name, summary,
72
                      section=SECT_LIST):
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
73
        """Register a new help topic, and import the details on demand.
74
75
        :param topic: Name of documentation entry
76
        :param module_name: The module to find the detailed help.
77
        :param member_name: The member of the module to use for detailed help.
78
        :param summary: String providing single-line documentation for topic.
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
79
        :param section: Section in reference manual - see SECT_* identifiers.
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
80
        """
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
81
        # The detail is stored as the 'object' and the metadata as the info
6059.3.1 by Vincent Ladeuil
Provide per-config option help
82
        info = (summary, section)
2070.4.15 by John Arbash Meinel
Fixes from Martin
83
        super(HelpTopicRegistry, self).register_lazy(topic, module_name,
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
84
                                                     member_name, info=info)
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
85
86
    def get_detail(self, topic):
87
        """Get the detailed help on a given topic."""
88
        obj = self.get(topic)
89
        if callable(obj):
90
            return obj(topic)
91
        else:
92
            return obj
93
94
    def get_summary(self, topic):
95
        """Get the single line summary for the topic."""
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
96
        info = self.get_info(topic)
97
        if info is None:
98
            return None
99
        else:
100
            return info[0]
101
102
    def get_section(self, topic):
103
        """Get the section for the topic."""
104
        info = self.get_info(topic)
105
        if info is None:
106
            return None
107
        else:
108
            return info[1]
109
110
    def get_topics_for_section(self, section):
111
        """Get the set of topics in a section."""
112
        result = set()
113
        for topic in self.keys():
114
            if section == self.get_section(topic):
115
                result.add(topic)
116
        return result
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
117
118
119
topic_registry = HelpTopicRegistry()
2023.1.2 by ghigo
add help topics module
120
121
7143.15.2 by Jelmer Vernooij
Run autopep8.
122
# ----------------------------------------------------
2023.1.2 by ghigo
add help topics module
123
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
124
def _help_on_topics(dummy):
2023.1.2 by ghigo
add help topics module
125
    """Write out the help for topics to outfile"""
126
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
127
    topics = topic_registry.keys()
2070.4.2 by John Arbash Meinel
cleanup help_topics.py
128
    lmax = max(len(topic) for topic in topics)
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
129
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
130
    out = []
2023.1.2 by ghigo
add help topics module
131
    for topic in topics:
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
132
        summary = topic_registry.get_summary(topic)
133
        out.append("%-*s %s\n" % (lmax, topic, summary))
134
    return ''.join(out)
135
136
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
137
def _load_from_file(topic_name):
138
    """Load help from a file.
139
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
140
    Topics are expected to be txt files in breezy.help_topics.
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
141
    """
3089.3.10 by Ian Clatworthy
more feedback from Alex - make help_topics a real package
142
    resource_name = osutils.pathjoin("en", "%s.txt" % (topic_name,))
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
143
    return osutils.resource_string('breezy.help_topics', resource_name)
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
144
145
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
146
def _help_on_revisionspec(name):
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
147
    """Generate the help for revision specs."""
148
    import re
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
149
    import breezy.revisionspec
2023.1.2 by ghigo
add help topics module
150
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
151
    out = []
3651.2.2 by Daniel Clemente
Explained the syntax for revision and range identifiers
152
    out.append(
7143.15.2 by Jelmer Vernooij
Run autopep8.
153
        """Revision Identifiers
3651.2.2 by Daniel Clemente
Explained the syntax for revision and range identifiers
154
4569.2.5 by Matthew Fuller
Update online documentation to match new DWIM behavior.
155
A revision identifier refers to a specific state of a branch's history.  It
156
can be expressed in several ways.  It can begin with a keyword to
157
unambiguously specify a given lookup type; some examples are 'last:1',
158
'before:yesterday' and 'submit:'.
159
160
Alternately, it can be given without a keyword, in which case it will be
161
checked as a revision number, a tag, a revision id, a date specification, or a
162
branch specification, in that order.  For example, 'date:today' could be
163
written as simply 'today', though if you have a tag called 'today' that will
164
be found first.
3651.2.2 by Daniel Clemente
Explained the syntax for revision and range identifiers
165
166
If 'REV1' and 'REV2' are revision identifiers, then 'REV1..REV2' denotes a
167
revision range. Examples: '3647..3649', 'date:yesterday..-1' and
168
'branch:/path/to/branch1/..branch:/branch2' (note that there are no quotes or
3651.2.3 by Daniel Clemente
Explained more about range interpretations. Removed sentence about REV1..REV2..REV3 because it's unimplemented
169
spaces around the '..').
170
171
Ranges are interpreted differently by different commands. To the "log" command,
172
a range is a sequence of log messages, but to the "diff" command, the range
173
denotes a change between revisions (and not a sequence of changes).  In
174
addition, "log" considers a closed range whereas "diff" and "merge" consider it
175
to be open-ended, that is, they include one end but not the other.  For example:
6622.1.30 by Jelmer Vernooij
Some more test fixes.
176
"brz log -r 3647..3649" shows the messages of revisions 3647, 3648 and 3649,
177
while "brz diff -r 3647..3649" includes the changes done in revisions 3648 and
3946.1.2 by Ian Clatworthy
Correct incorrect wording in revisionspec help (Matthew Fuller)
178
3649, but not 3647.
3651.2.2 by Daniel Clemente
Explained the syntax for revision and range identifiers
179
180
The keywords used as revision selection methods are the following:
181
""")
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
182
    details = []
3651.2.2 by Daniel Clemente
Explained the syntax for revision and range identifiers
183
    details.append("\nIn addition, plugins can provide other keywords.")
7143.15.2 by Jelmer Vernooij
Run autopep8.
184
    details.append(
185
        "\nA detailed description of each keyword is given below.\n")
2023.1.2 by ghigo
add help topics module
186
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
187
    # The help text is indented 4 spaces - this re cleans that up below
188
    indent_re = re.compile(r'^    ', re.MULTILINE)
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
189
    for prefix, i in breezy.revisionspec.revspec_registry.iteritems():
2070.4.14 by John Arbash Meinel
Switch revisionspec to use the help defined as help_txt rather than the doc string
190
        doc = i.help_txt
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
191
        if doc == breezy.revisionspec.RevisionSpec.help_txt:
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
192
            summary = "N/A"
193
            doc = summary + "\n"
194
        else:
195
            # Extract out the top line summary from the body and
196
            # clean-up the unwanted whitespace
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
197
            summary, doc = doc.split("\n", 1)
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
198
            #doc = indent_re.sub('', doc)
199
            while (doc[-2:] == '\n\n' or doc[-1:] == ' '):
200
                doc = doc[:-1]
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
201
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
202
        # Note: The leading : here are HACKs to get reStructuredText
203
        # 'field' formatting - we know that the prefix ends in a ':'.
204
        out.append(":%s\n\t%s" % (i.prefix, summary))
205
        details.append(":%s\n%s" % (i.prefix, doc))
206
207
    return '\n'.join(out + details)
2023.1.2 by ghigo
add help topics module
208
2241.2.11 by ghigo
On the basis of Robert Collins and John Arbash Meinel
209
2241.2.5 by ghigo
add the topics transport
210
def _help_on_transport(name):
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
211
    from breezy.transport import (
2241.2.5 by ghigo
add the topics transport
212
        transport_list_registry,
213
    )
214
    import textwrap
215
216
    def add_string(proto, help, maxl, prefix_width=20):
7143.15.2 by Jelmer Vernooij
Run autopep8.
217
        help_lines = textwrap.wrap(help, maxl - prefix_width,
218
                                   break_long_words=False)
219
        line_with_indent = '\n' + ' ' * prefix_width
220
        help_text = line_with_indent.join(help_lines)
221
        return "%-20s%s\n" % (proto, help_text)
2241.2.5 by ghigo
add the topics transport
222
6973.12.3 by Jelmer Vernooij
Fixes.
223
    def key_func(a):
224
        return a[:a.rfind("://")]
2241.2.8 by ghigo
- rename transport urlspec
225
2241.2.5 by ghigo
add the topics transport
226
    protl = []
227
    decl = []
6656.1.1 by Martin
Apply 2to3 dict fixer and clean up resulting mess using view helpers
228
    protos = transport_list_registry.keys()
6973.12.3 by Jelmer Vernooij
Fixes.
229
    protos.sort(key=key_func)
2241.2.5 by ghigo
add the topics transport
230
    for proto in protos:
231
        shorthelp = transport_list_registry.get_help(proto)
232
        if not shorthelp:
233
            continue
234
        if proto.endswith("://"):
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
235
            protl.append(add_string(proto, shorthelp, 79))
2241.2.5 by ghigo
add the topics transport
236
        else:
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
237
            decl.append(add_string(proto, shorthelp, 79))
238
239
    out = "URL Identifiers\n\n" + \
7143.15.2 by Jelmer Vernooij
Run autopep8.
240
        "Supported URL prefixes::\n\n  " + \
241
        '  '.join(protl)
2241.2.11 by ghigo
On the basis of Robert Collins and John Arbash Meinel
242
243
    if len(decl):
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
244
        out += "\nSupported modifiers::\n\n  " + \
245
            '  '.join(decl)
2241.2.5 by ghigo
add the topics transport
246
4634.130.2 by Andrew Bennetts
Add help topic for location aliases like :parent.
247
    out += """\
6622.1.31 by Jelmer Vernooij
Fix more tests.
248
\nBreezy supports all of the standard parts within the URL::
4634.130.2 by Andrew Bennetts
Add help topic for location aliases like :parent.
249
250
  <protocol>://[user[:password]@]host[:port]/[path]
251
252
allowing URLs such as::
253
6622.1.30 by Jelmer Vernooij
Some more test fixes.
254
  http://brzuser:BadPass@brz.example.com:8080/brz/trunk
4634.130.2 by Andrew Bennetts
Add help topic for location aliases like :parent.
255
6622.1.31 by Jelmer Vernooij
Fix more tests.
256
For brz+ssh:// and sftp:// URLs, Breezy also supports paths that begin
4798.4.4 by Matt Nordhoff
urlspec help: sftp URLs support ~ too
257
with '~' as meaning that the rest of the path should be interpreted
258
relative to the remote user's home directory.  For example if the user
259
``remote`` has a  home directory of ``/home/remote`` on the server
260
shell.example.com, then::
4798.4.3 by Neil Martinsen-Burrell
Add discussion of ~ in URLs
261
6622.1.30 by Jelmer Vernooij
Some more test fixes.
262
  brz+ssh://remote@shell.example.com/~/myproject/trunk
4798.4.3 by Neil Martinsen-Burrell
Add discussion of ~ in URLs
263
264
would refer to ``/home/remote/myproject/trunk``.
4797.17.1 by Andrew Bennetts
Merge alias-loc-docs-337834 (which was against lp:bzr/2.0).
265
6002.1.1 by John Arbash Meinel, Jelmer Vernooij
Add documentation on handling of special characters in URLs.
266
Many commands that accept URLs also accept location aliases too.
267
See :doc:`location-alias-help` and :doc:`url-special-chars-help`.
4634.130.2 by Andrew Bennetts
Add help topic for location aliases like :parent.
268
"""
269
2241.2.5 by ghigo
add the topics transport
270
    return out
271
2023.1.2 by ghigo
add help topics module
272
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
273
_basic_help = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
274
    """Breezy %s -- a free distributed version-control tool
6650.1.1 by Jelmer Vernooij
Update homepage URL.
275
https://www.breezy-vcs.org/
2023.1.2 by ghigo
add help topics module
276
277
Basic commands:
6622.1.30 by Jelmer Vernooij
Some more test fixes.
278
  brz init           makes this directory a versioned branch
279
  brz branch         make a copy of another branch
280
281
  brz add            make files or directories versioned
282
  brz ignore         ignore a file or pattern
283
  brz mv             move or rename a versioned file
284
285
  brz status         summarize changes in working copy
286
  brz diff           show detailed diffs
287
288
  brz merge          pull in changes from another branch
289
  brz commit         save some or all changes
290
  brz send           send changes via email
291
292
  brz log            show history of changes
293
  brz check          validate storage
294
295
  brz help init      more help on e.g. init command
296
  brz help commands  list all commands
297
  brz help topics    list all help topics
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
298
""" % breezy.__version__
2023.1.2 by ghigo
add help topics module
299
300
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
301
_global_options = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
302
    """Global Options
1551.9.32 by Aaron Bentley
Add global option help
303
304
These options may be used with any command, and may appear in front of any
6622.1.30 by Jelmer Vernooij
Some more test fixes.
305
command.  (e.g. ``brz --profile help``).
6161.1.5 by Vincent Ladeuil
Get rid of the --override-config long name, ensures the overrides are resest when the command has run.
306
307
--version      Print the version number. Must be supplied before the command.
308
--no-aliases   Do not process command aliases when running this command.
309
--builtin      Use the built-in version of a command, not the plugin version.
310
               This does not suppress other plugin effects.
311
--no-plugins   Do not process any plugins.
312
--no-l10n      Do not translate messages.
313
--concurrency  Number of processes that can be run concurrently (selftest).
314
315
--profile      Profile execution using the hotshot profiler.
316
--lsprof       Profile execution using the lsprof profiler.
317
--lsprof-file  Profile execution using the lsprof profiler, and write the
318
               results to a specified file.  If the filename ends with ".txt",
319
               text format will be used.  If the filename either starts with
320
               "callgrind.out" or end with ".callgrind", the output will be
321
               formatted for use with KCacheGrind. Otherwise, the output
322
               will be a pickle.
323
--coverage     Generate line coverage report in the specified directory.
324
325
-Oname=value   Override the ``name`` config option setting it to ``value`` for
326
               the duration of the command.  This can be used multiple times if
327
               several options need to be overridden.
2493.2.7 by Aaron Bentley
Add info to --lsprof-file entry in global options
328
7199.1.1 by Jelmer Vernooij
add a glossary, update some more links.
329
See https://www.breezy-vcs.org/developers/profiling.html for more
4927.2.7 by Ian Clatworthy
Better linking in global-options topic
330
information on profiling.
331
2768.1.14 by Ian Clatworthy
Incorporate feedback from poolie
332
A number of debug flags are also available to assist troubleshooting and
4927.2.7 by Ian Clatworthy
Better linking in global-options topic
333
development.  See :doc:`debug-flags-help`.
1551.9.32 by Aaron Bentley
Add global option help
334
"""
335
2768.1.1 by Ian Clatworthy
Document standard options
336
_standard_options = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
337
    """Standard Options
2768.1.1 by Ian Clatworthy
Document standard options
338
339
Standard options are legal for all commands.
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
340
2768.1.1 by Ian Clatworthy
Document standard options
341
--help, -h     Show help message.
2768.1.13 by Ian Clatworthy
Minor fixes to help
342
--verbose, -v  Display more information.
343
--quiet, -q    Only display errors and warnings.
2768.1.1 by Ian Clatworthy
Document standard options
344
2768.1.14 by Ian Clatworthy
Incorporate feedback from poolie
345
Unlike global options, standard options can be used in aliases.
2768.1.1 by Ian Clatworthy
Document standard options
346
"""
347
348
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
349
_checkouts = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
350
    """Checkouts
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
351
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
352
Checkouts are source trees that are connected to a branch, so that when
353
you commit in the source tree, the commit goes into that branch.  They
354
allow you to use a simpler, more centralized workflow, ignoring some of
6622.1.31 by Jelmer Vernooij
Fix more tests.
355
Breezy's decentralized features until you want them. Using checkouts
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
356
with shared repositories is very similar to working with SVN or CVS, but
357
doesn't have the same restrictions.  And using checkouts still allows
358
others working on the project to use whatever workflow they like.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
359
6622.1.30 by Jelmer Vernooij
Some more test fixes.
360
A checkout is created with the brz checkout command (see "help checkout").
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
361
You pass it a reference to another branch, and it will create a local copy
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
362
for you that still contains a reference to the branch you created the
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
363
checkout from (the master branch). Then if you make any commits they will be
364
made on the other branch first. This creates an instant mirror of your work, or
365
facilitates lockstep development, where each developer is working together,
366
continuously integrating the changes of others.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
367
6622.1.31 by Jelmer Vernooij
Fix more tests.
368
However the checkout is still a first class branch in Breezy terms, so that
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
369
you have the full history locally.  As you have a first class branch you can
370
also commit locally if you want, for instance due to the temporary loss af a
371
network connection. Use the --local option to commit to do this. All the local
372
commits will then be made on the master branch the next time you do a non-local
373
commit.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
374
375
If you are using a checkout from a shared branch you will periodically want to
376
pull in all the changes made by others. This is done using the "update"
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
377
command. The changes need to be applied before any non-local commit, but
6622.1.31 by Jelmer Vernooij
Fix more tests.
378
Breezy will tell you if there are any changes and suggest that you use this
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
379
command when needed.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
380
381
It is also possible to create a "lightweight" checkout by passing the
382
--lightweight flag to checkout. A lightweight checkout is even closer to an
383
SVN checkout in that it is not a first class branch, it mainly consists of the
384
working tree. This means that any history operations must query the master
385
branch, which could be slow if a network connection is involved. Also, as you
386
don't have a local branch, then you cannot commit locally.
387
2374.1.1 by Ian Clatworthy
Help and man page fixes
388
Lightweight checkouts work best when you have fast reliable access to the
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
389
master branch. This means that if the master branch is on the same disk or LAN
390
a lightweight checkout will be faster than a heavyweight one for any commands
3310.2.1 by James Westby
Fix wording in the checkouts help topic.
391
that modify the revision history (as only one copy of the branch needs to
392
be updated). Heavyweight checkouts will generally be faster for any command
393
that uses the history but does not change it, but if the master branch is on
394
the same disk then there won't be a noticeable difference.
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
395
396
Another possible use for a checkout is to use it with a treeless repository
2370.1.2 by Ian Clatworthy
Minor fixes to help on checkouts
397
containing your branches, where you maintain only one working tree by
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
398
switching the master branch that the checkout points to when you want to
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
399
work on a different branch.
400
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
401
Obviously to commit on a checkout you need to be able to write to the master
2370.1.2 by Ian Clatworthy
Minor fixes to help on checkouts
402
branch. This means that the master branch must be accessible over a writeable
2245.7.2 by James Westby
Update the checkouts help topic with the comments from Aaron.
403
protocol , such as sftp://, and that you have write permissions at the other
404
end. Checkouts also work on the local file system, so that all that matters is
405
file permissions.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
406
5031.2.1 by Matthew Fuller
Suggest 'switch' rather than 'bind' for changing the branch of a
407
You can change the master of a checkout by using the "switch" command (see
5031.2.2 by Matthew Fuller
Rewrap paragraph.
408
"help switch").  This will change the location that the commits are sent to.
409
The "bind" command can also be used to turn a normal branch into a heavy
410
checkout. If you would like to convert your heavy checkout into a normal
411
branch so that every commit is local, you can use the "unbind" command. To see
412
whether or not a branch is bound or not you can use the "info" command. If the
413
branch is bound it will tell you the location of the bound branch.
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
414
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
415
Related commands::
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
416
417
  checkout    Create a checkout. Pass --lightweight to get a lightweight
418
              checkout
419
  update      Pull any changes in the master branch in to your checkout
420
  commit      Make a commit that is sent to the master branch. If you have
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
421
              a heavy checkout then the --local option will commit to the
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
422
              checkout without sending the commit to the master
5031.2.1 by Matthew Fuller
Suggest 'switch' rather than 'bind' for changing the branch of a
423
  switch      Change the master branch that the commits in the checkout will
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
424
              be sent to
5031.2.1 by Matthew Fuller
Suggest 'switch' rather than 'bind' for changing the branch of a
425
  bind        Turn a standalone branch into a heavy checkout so that any
426
              commits will be sent to the master branch
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
427
  unbind      Turn a heavy checkout into a standalone branch so that any
428
              commits are only made locally
4871.2.1 by Patrick Regan
Added info to related commands in checkouts
429
  info        Displays whether a branch is bound or unbound. If the branch is
430
              bound, then it will also display the location of the bound branch
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
431
"""
432
2401.2.1 by James Westby
Add a help topic for repositories.
433
_repositories = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
434
    """Repositories
2401.2.1 by James Westby
Add a help topic for repositories.
435
6622.1.31 by Jelmer Vernooij
Fix more tests.
436
Repositories in Breezy are where committed information is stored. There is
2604.2.1 by Robert Collins
(robertc) Introduce a pack command.
437
a repository associated with every branch.
438
6622.1.30 by Jelmer Vernooij
Some more test fixes.
439
Repositories are a form of database. Breezy will usually maintain this for
2604.2.1 by Robert Collins
(robertc) Introduce a pack command.
440
good performance automatically, but in some situations (e.g. when doing
6622.1.30 by Jelmer Vernooij
Some more test fixes.
441
very many commits in a short time period) you may want to ask brz to
442
optimise the database indices. This can be done by the 'brz pack' command.
2604.2.1 by Robert Collins
(robertc) Introduce a pack command.
443
6622.1.30 by Jelmer Vernooij
Some more test fixes.
444
By default just running 'brz init' will create a repository within the new
2604.2.1 by Robert Collins
(robertc) Introduce a pack command.
445
branch but it is possible to create a shared repository which allows multiple
446
branches to share their information in the same location. When a new branch is
447
created it will first look to see if there is a containing shared repository it
448
can use.
2485.1.2 by James Westby
Update with comments from review, thanks to John and Aaron.
449
450
When two branches of the same project share a repository, there is
451
generally a large space saving. For some operations (e.g. branching
452
within the repository) this translates in to a large time saving.
2401.2.1 by James Westby
Add a help topic for repositories.
453
7385.2.1 by Jelmer Vernooij
Rename init-repo to init-shared-repo.
454
To create a shared repository use the init-shared-repository command (or the
455
alias init-shared-repo). This command takes the location of the repository to
456
create. This means that 'brz init-shared-repository repo' will create a
457
directory named 'repo', which contains a shared repository. Any new branches
458
that are created in this directory will then use it for storage.
2401.2.1 by James Westby
Add a help topic for repositories.
459
460
It is a good idea to create a repository whenever you might create more
461
than one branch of a project. This is true for both working areas where you
462
are doing the development, and any server areas that you use for hosting
2485.1.2 by James Westby
Update with comments from review, thanks to John and Aaron.
463
projects. In the latter case, it is common to want branches without working
464
trees. Since the files in the branch will not be edited directly there is no
465
need to use up disk space for a working tree. To create a repository in which
466
the branches will not have working trees pass the '--no-trees' option to
7385.2.1 by Jelmer Vernooij
Rename init-repo to init-shared-repo.
467
'init-shared-repository'.
2401.2.1 by James Westby
Add a help topic for repositories.
468
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
469
Related commands::
2401.2.1 by James Westby
Add a help topic for repositories.
470
7385.2.1 by Jelmer Vernooij
Rename init-repo to init-shared-repo.
471
  init-shared-repository   Create a shared repository. Use --no-trees to create
472
                           one in which new branches won't get a working tree.
2401.2.1 by James Westby
Add a help topic for repositories.
473
"""
474
2485.1.2 by James Westby
Update with comments from review, thanks to John and Aaron.
475
2401.2.2 by James Westby
Add a working-trees help topic.
476
_working_trees = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
477
    """Working Trees
2401.2.2 by James Westby
Add a working-trees help topic.
478
2485.1.2 by James Westby
Update with comments from review, thanks to John and Aaron.
479
A working tree is the contents of a branch placed on disk so that you can
2401.2.2 by James Westby
Add a working-trees help topic.
480
see the files and edit them. The working tree is where you make changes to a
481
branch, and when you commit the current state of the working tree is the
482
snapshot that is recorded in the commit.
483
2485.1.2 by James Westby
Update with comments from review, thanks to John and Aaron.
484
When you push a branch to a remote system, a working tree will not be
485
created. If one is already present the files will not be updated. The
486
branch information will be updated and the working tree will be marked
487
as out-of-date. Updating a working tree remotely is difficult, as there
488
may be uncommitted changes or the update may cause content conflicts that are
489
difficult to deal with remotely.
2401.2.2 by James Westby
Add a working-trees help topic.
490
491
If you have a branch with no working tree you can use the 'checkout' command
6622.1.30 by Jelmer Vernooij
Some more test fixes.
492
to create a working tree. If you run 'brz checkout .' from the branch it will
2485.1.2 by James Westby
Update with comments from review, thanks to John and Aaron.
493
create the working tree. If the branch is updated remotely, you can update the
6622.1.30 by Jelmer Vernooij
Some more test fixes.
494
working tree by running 'brz update' in that directory.
2401.2.2 by James Westby
Add a working-trees help topic.
495
496
If you have a branch with a working tree that you do not want the 'remove-tree'
497
command will remove the tree if it is safe. This can be done to avoid the
498
warning about the remote working tree not being updated when pushing to the
499
branch. It can also be useful when working with a '--no-trees' repository
6622.1.30 by Jelmer Vernooij
Some more test fixes.
500
(see 'brz help repositories').
2401.2.2 by James Westby
Add a working-trees help topic.
501
502
If you want to have a working tree on a remote machine that you push to you
6622.1.30 by Jelmer Vernooij
Some more test fixes.
503
can either run 'brz update' in the remote branch after each push, or use some
2401.2.2 by James Westby
Add a working-trees help topic.
504
other method to update the tree during the push. There is an 'rspush' plugin
505
that will update the working tree using rsync as well as doing a push. There
6622.1.30 by Jelmer Vernooij
Some more test fixes.
506
is also a 'push-and-update' plugin that automates running 'brz update' via SSH
2401.2.2 by James Westby
Add a working-trees help topic.
507
after each push.
508
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
509
Useful commands::
2401.2.2 by James Westby
Add a working-trees help topic.
510
511
  checkout     Create a working tree when a branch does not have one.
512
  remove-tree  Removes the working tree from a branch when it is safe to do so.
5448.2.1 by Martin
Fix some "its" vs. "it's" spelling confusion in bzrlib code... also, ahem, a name in the NEWS file
513
  update       When a working tree is out of sync with its associated branch
2401.2.2 by James Westby
Add a working-trees help topic.
514
               this will update the tree to match the branch.
515
"""
516
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
517
518
_branches = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
519
    """Branches
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
520
521
A branch consists of the state of a project, including all of its
522
history. All branches have a repository associated (which is where the
523
branch history is stored), but multiple branches may share the same
524
repository (a shared repository). Branches can be copied and merged.
525
4971.2.2 by Neil Martinsen-Burrell
address Vincents comments
526
In addition, one branch may be bound to another one.  Binding to another
7195.5.1 by Martin
Fix remaining whitespace lint in codebase
527
branch indicates that commits which happen in this branch must also
528
happen in the other branch.  Breezy ensures consistency by not allowing
529
commits when the two branches are out of date.  In order for a commit
530
to succeed, it may be necessary to update the current branch using
6622.1.30 by Jelmer Vernooij
Some more test fixes.
531
``brz update``.
4971.2.1 by Neil Martinsen-Burrell
add bound branch discussion in branches help topic
532
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
533
Related commands::
534
3535.4.2 by Marius Kruger
Update branches help topic to avoid ambiguity.
535
  init    Change a directory into a versioned branch.
4431.2.1 by mernst at mit
branch documentation: clarify English word "copy"
536
  branch  Create a new branch that is a copy of an existing branch.
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
537
  merge   Perform a three-way merge.
4971.2.1 by Neil Martinsen-Burrell
add bound branch discussion in branches help topic
538
  bind    Bind a branch to another one.
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
539
"""
540
541
542
_standalone_trees = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
543
    """Standalone Trees
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
544
545
A standalone tree is a working tree with an associated repository. It
546
is an independently usable branch, with no dependencies on any other.
6622.1.30 by Jelmer Vernooij
Some more test fixes.
547
Creating a standalone tree (via brz init) is the quickest way to put
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
548
an existing project under version control.
549
550
Related Commands::
551
552
  init    Make a directory into a versioned branch.
553
"""
554
555
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
556
_status_flags = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
557
    """Status Flags
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
558
559
Status flags are used to summarise changes to the working tree in a concise
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
560
manner.  They are in the form::
561
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
562
   xxx   <filename>
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
563
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
564
where the columns' meanings are as follows.
565
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
566
Column 1 - versioning/renames::
567
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
568
  + File versioned
569
  - File unversioned
570
  R File renamed
571
  ? File unknown
6622.1.30 by Jelmer Vernooij
Some more test fixes.
572
  X File nonexistent (and unknown to brz)
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
573
  C File has conflicts
574
  P Entry for a pending merge (not a file)
575
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
576
Column 2 - contents::
577
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
578
  N File created
579
  D File deleted
580
  K File kind changed
581
  M File modified
582
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
583
Column 3 - execute::
584
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
585
  * The execute bit was changed
586
"""
587
1551.9.32 by Aaron Bentley
Add global option help
588
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
589
known_env_variables = [
6622.1.30 by Jelmer Vernooij
Some more test fixes.
590
    ("BRZPATH", "Path where brz is to look for shell plugin external commands."),
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
591
    ("BRZ_EMAIL", "E-Mail address of the user. Overrides EMAIL."),
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
592
    ("EMAIL", "E-Mail address of the user."),
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
593
    ("BRZ_EDITOR", "Editor for editing commit messages. Overrides EDITOR."),
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
594
    ("EDITOR", "Editor for editing commit messages."),
6622.1.30 by Jelmer Vernooij
Some more test fixes.
595
    ("BRZ_PLUGIN_PATH", "Paths where brz should look for plugins."),
596
    ("BRZ_DISABLE_PLUGINS", "Plugins that brz should not load."),
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
597
    ("BRZ_PLUGINS_AT", "Plugins to load from a directory not in BRZ_PLUGIN_PATH."),
6740.1.1 by Jelmer Vernooij
Rename bazaar.conf to breezy.conf.
598
    ("BRZ_HOME", "Directory holding breezy config dir. Overrides HOME."),
599
    ("BRZ_HOME (Win32)", "Directory holding breezy config dir. Overrides APPDATA and HOME."),
6622.1.33 by Jelmer Vernooij
Fix more tests (all?)
600
    ("BZR_REMOTE_PATH", "Full name of remote 'brz' command (for brz+ssh:// URLs)."),
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
601
    ("BRZ_SSH", "Path to SSH client, or one of paramiko, openssh, sshcorp, plink or lsh."),
7344.2.1 by Martin
Relocate the bzr log file out of $HOME
602
    ("BRZ_LOG", "Location of brz.log (use '/dev/null' to suppress log)."),
603
    ("BRZ_LOG (Win32)", "Location of brz.log (use 'NUL' to suppress log)."),
6622.1.28 by Jelmer Vernooij
More renames; commands in output, environment variables.
604
    ("BRZ_COLUMNS", "Override implicit terminal width."),
605
    ("BRZ_CONCURRENCY", "Number of processes that can be run concurrently (selftest)"),
606
    ("BRZ_PROGRESS_BAR", "Override the progress display. Values are 'none' or 'text'."),
607
    ("BRZ_PDB", "Control whether to launch a debugger on error."),
7143.15.2 by Jelmer Vernooij
Run autopep8.
608
    ("BRZ_SIGQUIT_PDB",
609
     "Control whether SIGQUIT behaves normally or invokes a breakin debugger."),
610
    ("BRZ_TEXTUI_INPUT",
611
     "Force console input mode for prompts to line-based (instead of char-based)."),
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
612
    ]
6503.2.1 by Jelmer Vernooij
Stick all environment variables in a big dictionary.
613
7143.15.2 by Jelmer Vernooij
Run autopep8.
614
6503.2.1 by Jelmer Vernooij
Stick all environment variables in a big dictionary.
615
def _env_variables(topic):
616
    import textwrap
6565.1.1 by Robert Collins
* ``bzr help env-variables`` now points users at ``bzr help configuration``
617
    ret = ["Environment Variables\n\n"
7143.15.2 by Jelmer Vernooij
Run autopep8.
618
           "See brz help configuration for more details.\n\n"]
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
619
    max_key_len = max([len(k[0]) for k in known_env_variables])
6503.2.1 by Jelmer Vernooij
Stick all environment variables in a big dictionary.
620
    desc_len = (80 - max_key_len - 2)
621
    ret.append("=" * max_key_len + " " + "=" * desc_len + "\n")
6503.2.4 by Jelmer Vernooij
Use tuples for known env variables list.
622
    for k, desc in known_env_variables:
6503.2.1 by Jelmer Vernooij
Stick all environment variables in a big dictionary.
623
        ret.append(k + (max_key_len + 1 - len(k)) * " ")
624
        ret.append("\n".join(textwrap.wrap(
625
            desc, width=desc_len, subsequent_indent=" " * (max_key_len + 1))))
626
        ret.append("\n")
627
    ret += "=" * max_key_len + " " + "=" * desc_len + "\n"
628
    return "".join(ret)
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
629
7143.15.2 by Jelmer Vernooij
Run autopep8.
630
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
631
_files = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
632
    r"""Files
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
633
6740.1.1 by Jelmer Vernooij
Rename bazaar.conf to breezy.conf.
634
:On Unix:   ~/.config/breezy/breezy.conf
7344.2.1 by Martin
Relocate the bzr log file out of $HOME
635
:On Windows: %APPDATA%\\breezy\\breezy.conf
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
636
637
Contains the user's default configuration. The section ``[DEFAULT]`` is
638
used to define general configuration that will be applied everywhere.
639
The section ``[ALIASES]`` can be used to create command aliases for
640
commonly used options.
641
642
A typical config file might look something like::
643
644
  [DEFAULT]
645
  email=John Doe <jdoe@isp.com>
646
647
  [ALIASES]
648
  commit = commit --strict
649
  log10 = log --short -r -10..-1
650
"""
651
1551.19.11 by Aaron Bentley
Add criss-cross help topic
652
_criss_cross = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
653
    """Criss-Cross
3079.1.1 by Alexander Belchenko
topic for criss-cross should have title, otherwise autogenerated bzr_man has problems.
654
1551.19.11 by Aaron Bentley
Add criss-cross help topic
655
A criss-cross in the branch history can cause the default merge technique
656
to emit more conflicts than would normally be expected.
657
6622.1.30 by Jelmer Vernooij
Some more test fixes.
658
In complex merge cases, ``brz merge --lca`` or ``brz merge --weave`` may give
659
better results.  You may wish to ``brz revert`` the working tree and merge
660
again.  Alternatively, use ``brz remerge`` on particular conflicted files.
1551.19.11 by Aaron Bentley
Add criss-cross help topic
661
662
Criss-crosses occur in a branch's history if two branches merge the same thing
663
and then merge one another, or if two branches merge one another at the same
664
time.  They can be avoided by having each branch only merge from or into a
665
designated central branch (a "star topology").
666
6622.1.31 by Jelmer Vernooij
Fix more tests.
667
Criss-crosses cause problems because of the way merge works.  Breezy's default
1551.19.11 by Aaron Bentley
Add criss-cross help topic
668
merge is a three-way merger; in order to merge OTHER into THIS, it must
669
find a basis for comparison, BASE.  Using BASE, it can determine whether
670
differences between THIS and OTHER are due to one side adding lines, or
671
from another side removing lines.
672
673
Criss-crosses mean there is no good choice for a base.  Selecting the recent
674
merge points could cause one side's changes to be silently discarded.
6622.1.31 by Jelmer Vernooij
Fix more tests.
675
Selecting older merge points (which Breezy does) mean that extra conflicts
1551.19.11 by Aaron Bentley
Add criss-cross help topic
676
are emitted.
677
678
The ``weave`` merge type is not affected by this problem because it uses
1551.19.13 by Aaron Bentley
Update assuming --weave is cheap
679
line-origin detection instead of a basis revision to determine the cause of
3324.3.1 by Martin Pool
help criss-cross should suggest using remerge
680
differences.
3324.3.2 by Martin Pool
criss-cross help: suggest revert/merge
681
"""
1551.19.11 by Aaron Bentley
Add criss-cross help topic
682
4927.2.1 by Ian Clatworthy
conflicts topic renamed to conflict-types and other minor help clean-ups
683
_branches_out_of_sync = """Branches Out of Sync
3338.1.4 by Aaron Bentley
Add sync-for-reconfigure help topic
684
685
When reconfiguring a checkout, tree or branch into a lightweight checkout,
686
a local branch must be destroyed.  (For checkouts, this is the local branch
687
that serves primarily as a cache.)  If the branch-to-be-destroyed does not
688
have the same last revision as the new reference branch for the lightweight
6622.1.31 by Jelmer Vernooij
Fix more tests.
689
checkout, data could be lost, so Breezy refuses.
3338.1.4 by Aaron Bentley
Add sync-for-reconfigure help topic
690
691
How you deal with this depends on *why* the branches are out of sync.
692
693
If you have a checkout and have done local commits, you can get back in sync
6622.1.30 by Jelmer Vernooij
Some more test fixes.
694
by running "brz update" (and possibly "brz commit").
3338.1.4 by Aaron Bentley
Add sync-for-reconfigure help topic
695
696
If you have a branch and the remote branch is out-of-date, you can push
6622.1.30 by Jelmer Vernooij
Some more test fixes.
697
the local changes using "brz push".  If the local branch is out of date, you
698
can do "brz pull".  If both branches have had changes, you can merge, commit
3338.1.4 by Aaron Bentley
Add sync-for-reconfigure help topic
699
and then push your changes.  If you decide that some of the changes aren't
700
useful, you can "push --overwrite" or "pull --overwrite" instead.
701
"""
702
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
703
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
704
_storage_formats = \
7143.15.2 by Jelmer Vernooij
Run autopep8.
705
    """Storage Formats
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
706
707
To ensure that older clients do not access data incorrectly,
6622.1.31 by Jelmer Vernooij
Fix more tests.
708
Breezy's policy is to introduce a new storage format whenever
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
709
new features requiring new metadata are added. New storage
710
formats may also be introduced to improve performance and
711
scalability.
712
4634.87.1 by Andrew Bennetts
Cherrypick lp:bzr r4743: (igc) Fix help on formats now that 2a is released (Jared Hance)
713
The newest format, 2a, is highly recommended. If your
714
project is not using 2a, then you should suggest to the
715
project owner to upgrade.
716
717
4927.2.3 by Ian Clatworthy
improve formatting: better linking, notes, etc.
718
.. note::
719
720
   Some of the older formats have two variants:
721
   a plain one and a rich-root one. The latter include an additional
722
   field about the root of the tree. There is no performance cost
723
   for using a rich-root format but you cannot easily merge changes
724
   from a rich-root format into a plain format. As a consequence,
725
   moving a project to a rich-root format takes some co-ordination
726
   in that all contributors need to upgrade their repositories
727
   around the same time. 2a and all future formats will be
728
   implicitly rich-root.
729
730
See :doc:`current-formats-help` for the complete list of
731
currently supported formats. See :doc:`other-formats-help` for
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
732
descriptions of any available experimental and deprecated formats.
733
"""
734
735
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
736
# Register help topics
2070.4.13 by John Arbash Meinel
Switch help_topics to use a Registry.
737
topic_registry.register("revisionspec", _help_on_revisionspec,
738
                        "Explain how to use --revision")
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
739
topic_registry.register('basic', _basic_help, "Basic commands", SECT_HIDDEN)
740
topic_registry.register('topics', _help_on_topics, "Topics list", SECT_HIDDEN)
7143.15.2 by Jelmer Vernooij
Run autopep8.
741
742
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
743
def get_current_formats_topic(topic):
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
744
    from breezy import controldir
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
745
    return "Current Storage Formats\n\n" + \
6472.2.1 by Jelmer Vernooij
Use bzrdir.controldir for generic access to control directories.
746
        controldir.format_registry.help_topic(topic)
7143.15.2 by Jelmer Vernooij
Run autopep8.
747
748
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
749
def get_other_formats_topic(topic):
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
750
    from breezy import controldir
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
751
    return "Other Storage Formats\n\n" + \
6472.2.1 by Jelmer Vernooij
Use bzrdir.controldir for generic access to control directories.
752
        controldir.format_registry.help_topic(topic)
7143.15.2 by Jelmer Vernooij
Run autopep8.
753
754
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
755
topic_registry.register('current-formats', get_current_formats_topic,
7143.15.2 by Jelmer Vernooij
Run autopep8.
756
                        'Current storage formats')
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
757
topic_registry.register('other-formats', get_other_formats_topic,
7143.15.2 by Jelmer Vernooij
Run autopep8.
758
                        'Experimental and deprecated storage formats')
2768.1.1 by Ian Clatworthy
Document standard options
759
topic_registry.register('standard-options', _standard_options,
760
                        'Options that can be used with any command')
1551.9.34 by Aaron Bentley
Fix NEWS and whitespace
761
topic_registry.register('global-options', _global_options,
7143.15.2 by Jelmer Vernooij
Run autopep8.
762
                        'Options that control how Breezy runs')
2241.2.8 by ghigo
- rename transport urlspec
763
topic_registry.register('urlspec', _help_on_transport,
2241.2.5 by ghigo
add the topics transport
764
                        "Supported transport protocols")
2520.1.1 by Daniel Watkins
Added 'help status-flags'.
765
topic_registry.register('status-flags', _status_flags,
766
                        "Help on status flags")
7143.15.2 by Jelmer Vernooij
Run autopep8.
767
768
2376.4.36 by Jonathan Lange
Provide really basic help topic for our bug tracker support.
769
def get_bugs_topic(topic):
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
770
    from breezy import bugtracker
7143.15.2 by Jelmer Vernooij
Run autopep8.
771
    return ("Bug Tracker Settings\n\n"
772
            + bugtracker.tracker_registry.help_topic(topic))
773
774
3053.8.1 by Ian Clatworthy
Improve bug tracker integration documentation (Ian Clatworthy)
775
topic_registry.register('bugs', get_bugs_topic, 'Bug tracker settings')
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
776
topic_registry.register('env-variables', _env_variables,
777
                        'Environment variable names and values')
778
topic_registry.register('files', _files,
779
                        'Information on configuration and log files')
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
780
topic_registry.register_lazy('hooks', 'breezy.hooks', 'hooks_help_text',
7143.15.2 by Jelmer Vernooij
Run autopep8.
781
                             'Points at which custom processing can be added')
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
782
topic_registry.register_lazy('location-alias', 'breezy.directory_service',
7143.15.2 by Jelmer Vernooij
Run autopep8.
783
                             'AliasDirectory.help_text',
784
                             'Aliases for remembered locations')
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
785
4119.3.2 by Robert Collins
Migrate existing hooks over to the new HookPoint infrastructure.
786
# Load some of the help topics from files. Note that topics which reproduce API
787
# details will tend to skew (quickly usually!) so please seek other solutions
788
# for such things.
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
789
topic_registry.register('authentication', _load_from_file,
790
                        'Information on configuring authentication')
791
topic_registry.register('configuration', _load_from_file,
792
                        'Details on the configuration settings available')
4927.2.1 by Ian Clatworthy
conflicts topic renamed to conflict-types and other minor help clean-ups
793
topic_registry.register('conflict-types', _load_from_file,
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
794
                        'Types of conflicts and what to do about them')
4110.2.7 by Martin Pool
Split debug flags into their own help topic
795
topic_registry.register('debug-flags', _load_from_file,
796
                        'Options to show or record debug information')
7199.1.1 by Jelmer Vernooij
add a glossary, update some more links.
797
topic_registry.register('glossary', _load_from_file, 'Glossary')
3974.1.4 by Ian Clatworthy
log-formats topic and explained range searching
798
topic_registry.register('log-formats', _load_from_file,
799
                        'Details on the logging formats available')
6695.2.3 by Jelmer Vernooij
Add help topic.
800
topic_registry.register('missing-extensions', _load_from_file,
801
                        'What to do when compiled extensions are missing')
6002.1.1 by John Arbash Meinel, Jelmer Vernooij
Add documentation on handling of special characters in URLs.
802
topic_registry.register('url-special-chars', _load_from_file,
803
                        'Special character handling in URLs')
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
804
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
805
806
# Register concept topics.
807
# Note that we might choose to remove these from the online help in the
808
# future or implement them via loading content from files. In the meantime,
809
# please keep them concise.
810
topic_registry.register('branches', _branches,
811
                        'Information on what a branch is', SECT_CONCEPT)
812
topic_registry.register('checkouts', _checkouts,
813
                        'Information on what a checkout is', SECT_CONCEPT)
3368.2.17 by Ian Clatworthy
add content-filters help topic
814
topic_registry.register('content-filters', _load_from_file,
815
                        'Conversion of content into/from working trees',
816
                        SECT_CONCEPT)
4927.2.1 by Ian Clatworthy
conflicts topic renamed to conflict-types and other minor help clean-ups
817
topic_registry.register('diverged-branches', _load_from_file,
818
                        'How to fix diverged branches',
819
                        SECT_CONCEPT)
4208.4.1 by Ian Clatworthy
eol conversion support
820
topic_registry.register('eol', _load_from_file,
821
                        'Information on end-of-line handling',
822
                        SECT_CONCEPT)
3892.1.2 by Ian Clatworthy
split formats topic into multiple topics
823
topic_registry.register('formats', _storage_formats,
824
                        'Information on choosing a storage format',
825
                        SECT_CONCEPT)
3398.1.26 by Ian Clatworthy
jam feedback - make patterns a separate help topic
826
topic_registry.register('patterns', _load_from_file,
827
                        'Information on the pattern syntax',
828
                        SECT_CONCEPT)
2401.2.1 by James Westby
Add a help topic for repositories.
829
topic_registry.register('repositories', _repositories,
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
830
                        'Basic information on shared repositories.',
831
                        SECT_CONCEPT)
3398.1.20 by Ian Clatworthy
add rules help topic
832
topic_registry.register('rules', _load_from_file,
833
                        'Information on defining rule-based preferences',
834
                        SECT_CONCEPT)
2804.2.1 by Ian Clatworthy
add branches and standalone-trees as help topics
835
topic_registry.register('standalone-trees', _standalone_trees,
836
                        'Information on what a standalone tree is',
837
                        SECT_CONCEPT)
2401.2.2 by James Westby
Add a working-trees help topic.
838
topic_registry.register('working-trees', _working_trees,
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
839
                        'Information on working trees', SECT_CONCEPT)
1551.19.11 by Aaron Bentley
Add criss-cross help topic
840
topic_registry.register('criss-cross', _criss_cross,
841
                        'Information on criss-cross merging', SECT_CONCEPT)
3338.1.4 by Aaron Bentley
Add sync-for-reconfigure help topic
842
topic_registry.register('sync-for-reconfigure', _branches_out_of_sync,
3723.2.1 by John Arbash Meinel
Fix bug #270471 by updating the topic string for 'sync-for-reconfigure'
843
                        'Steps to resolve "out-of-sync" when reconfiguring',
844
                        SECT_CONCEPT)
2245.7.1 by James Westby
Add a help topic describing checkouts and how they work.
845
2432.1.1 by Robert Collins
Add a HelpTopicContext object.
846
2432.1.15 by Robert Collins
Rename Context (in bzrlib.help) to Index, for a clearer name.
847
class HelpTopicIndex(object):
6622.1.30 by Jelmer Vernooij
Some more test fixes.
848
    """A index for brz help that returns topics."""
2432.1.8 by Robert Collins
HelpTopicContext now returns RegisteredTopic objects for get_topics calls.
849
2432.1.17 by Robert Collins
Add prefixes to HelpIndexes.
850
    def __init__(self):
851
        self.prefix = ''
852
2432.1.8 by Robert Collins
HelpTopicContext now returns RegisteredTopic objects for get_topics calls.
853
    def get_topics(self, topic):
854
        """Search for topic in the HelpTopicRegistry.
855
856
        :param topic: A topic to search for. None is treated as 'basic'.
857
        :return: A list which is either empty or contains a single
858
            RegisteredTopic entry.
859
        """
860
        if topic is None:
861
            topic = 'basic'
862
        if topic in topic_registry:
863
            return [RegisteredTopic(topic)]
864
        else:
865
            return []
866
867
6059.3.1 by Vincent Ladeuil
Provide per-config option help
868
def _format_see_also(see_also):
869
    result = ''
870
    if see_also:
871
        result += '\n:See also: '
872
        result += ', '.join(sorted(set(see_also)))
873
        result += '\n'
874
    return result
875
876
2432.1.8 by Robert Collins
HelpTopicContext now returns RegisteredTopic objects for get_topics calls.
877
class RegisteredTopic(object):
878
    """A help topic which has been registered in the HelpTopicRegistry.
879
880
    These topics consist of nothing more than the name of the topic - all
881
    data is retrieved on demand from the registry.
882
    """
883
884
    def __init__(self, topic):
885
        """Constructor.
886
887
        :param topic: The name of the topic that this represents.
888
        """
889
        self.topic = topic
2432.1.10 by Robert Collins
Add get_help_text() to RegisteredTopic to get the help as a string.
890
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
891
    def get_help_text(self, additional_see_also=None, plain=True):
2432.1.22 by Robert Collins
Teach RegisteredTopic to support the additional_see_also list of related help terms.
892
        """Return a string with the help for this topic.
893
894
        :param additional_see_also: Additional help topics to be
895
            cross-referenced.
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
896
        :param plain: if False, raw help (reStructuredText) is
897
            returned instead of plain text.
2432.1.22 by Robert Collins
Teach RegisteredTopic to support the additional_see_also list of related help terms.
898
        """
899
        result = topic_registry.get_detail(self.topic)
6059.3.2 by Vincent Ladeuil
Cough, with tests.
900
        result += _format_see_also(additional_see_also)
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
901
        if plain:
902
            result = help_as_plain_text(result)
6110.7.1 by Jonathan Riddell
add topic help to translations
903
        i18n.install()
904
        result = i18n.gettext_per_paragraph(result)
2432.1.22 by Robert Collins
Teach RegisteredTopic to support the additional_see_also list of related help terms.
905
        return result
2432.1.27 by Robert Collins
Add a get_help_topic method to RegisteredTopic.
906
907
    def get_help_topic(self):
908
        """Return the help topic this can be found under."""
909
        return self.topic
2485.1.1 by James Westby
Update the help topics to the latest bzr.dev.
910
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
911
912
def help_as_plain_text(text):
913
    """Minimal converter of reStructuredText to plain text."""
4927.2.10 by Ian Clatworthy
fix test failures
914
    import re
5215.2.1 by John Szakmeister
Fix standalone code blocks in help text.
915
    # Remove the standalone code block marker
5215.2.2 by John Szakmeister
Make standlone code blocks work correctly in indented sections.
916
    text = re.sub(r"(?m)^\s*::\n\s*$", "", text)
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
917
    lines = text.splitlines()
918
    result = []
919
    for line in lines:
920
        if line.startswith(':'):
921
            line = line[1:]
922
        elif line.endswith('::'):
923
            line = line[:-1]
6622.1.30 by Jelmer Vernooij
Some more test fixes.
924
        # Map :doc:`xxx-help` to ``brz help xxx``
925
        line = re.sub(":doc:`(.+?)-help`", r'``brz help \1``', line)
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
926
        result.append(line)
927
    return "\n".join(result) + "\n"
6059.3.1 by Vincent Ladeuil
Provide per-config option help
928
929
930
class ConfigOptionHelpIndex(object):
931
    """A help index that returns help topics for config options."""
932
933
    def __init__(self):
934
        self.prefix = 'configuration/'
935
936
    def get_topics(self, topic):
937
        """Search for topic in the registered config options.
938
939
        :param topic: A topic to search for.
940
        :return: A list which is either empty or contains a single
941
            config.Option entry.
942
        """
943
        if topic is None:
944
            return []
945
        elif topic.startswith(self.prefix):
946
            topic = topic[len(self.prefix):]
947
        if topic in config.option_registry:
948
            return [config.option_registry.get(topic)]
949
        else:
950
            return []