~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/help_topics.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-04-17 00:59:30 UTC
  • mfrom: (1551.15.4 Aaron's mergeable stuff)
  • Revision ID: pqm@pqm.ubuntu.com-20070417005930-rofskshyjsfzrahh
Fix ftp transport with servers that don't support atomic rename

Show diffs side-by-side

added added

removed removed

Lines of Context:
81
81
 
82
82
 
83
83
def _help_on_revisionspec(name):
84
 
    """Write the summary help for all documented topics to outfile."""
 
84
    """"Write the summary help for all documented topics to outfile."""
85
85
    import bzrlib.revisionspec
86
86
 
87
87
    out = []
100
100
    return ''.join(out)
101
101
 
102
102
 
103
 
def _help_on_transport(name):
104
 
    from bzrlib.transport import (
105
 
        transport_list_registry,
106
 
    )
107
 
    import textwrap
108
 
 
109
 
    def add_string(proto, help, maxl, prefix_width=20):
110
 
       help_lines = textwrap.wrap(help, maxl - prefix_width)
111
 
       line_with_indent = '\n' + ' ' * prefix_width
112
 
       help_text = line_with_indent.join(help_lines)
113
 
       return "%-20s%s\n" % (proto, help_text)
114
 
 
115
 
    def sort_func(a,b):
116
 
        a1 = a[:a.rfind("://")]
117
 
        b1 = b[:b.rfind("://")]
118
 
        if a1>b1:
119
 
            return +1
120
 
        elif a1<b1:
121
 
            return -1
122
 
        else:
123
 
            return 0
124
 
 
125
 
    out = []
126
 
    protl = []
127
 
    decl = []
128
 
    protos = transport_list_registry.keys( )
129
 
    protos.sort(sort_func)
130
 
    for proto in protos:
131
 
        shorthelp = transport_list_registry.get_help(proto)
132
 
        if not shorthelp:
133
 
            continue
134
 
        if proto.endswith("://"):
135
 
            protl.extend(add_string(proto, shorthelp, 79))
136
 
        else:
137
 
            decl.extend(add_string(proto, shorthelp, 79))
138
 
 
139
 
 
140
 
    out = "\nSupported URL prefix\n--------------------\n" + \
141
 
            ''.join(protl)
142
 
 
143
 
    if len(decl):
144
 
        out += "\nSupported modifiers\n-------------------\n" + \
145
 
            ''.join(decl)
146
 
 
147
 
    return out
148
 
 
149
 
 
150
103
_basic_help= \
151
104
"""Bazaar -- a free distributed version-control tool
152
105
http://bazaar-vcs.org/
193
146
--profile      Profile execution using the hotshot profiler
194
147
--lsprof       Profile execution using the lsprof profiler
195
148
--lsprof-file  Profile execution using the lsprof profiler, and write the
196
 
               results to a specified file.  If the filename ends with ".txt",
197
 
               text format will be used.  If the filename ends with
198
 
               ".callgrind", output will be formatted for use with KCacheGrind.
199
 
               Otherwise, the output will be a pickle.
200
 
 
201
 
See doc/developers/profiling.txt for more information on profiling.
 
149
               results to a specified file.
202
150
 
203
151
Note: --version must be supplied before any command.
204
152
"""
281
229
              commits are only made locally
282
230
"""
283
231
 
284
 
_repositories = \
285
 
"""Repositories
286
 
 
287
 
Repositories in Bazaar are where committed information is stored. There is
288
 
a repository associated with every branch.
289
 
 
290
 
Repositories are a form of database. Bzr will usually maintain this for
291
 
good performance automatically, but in some situations (e.g. when doing
292
 
very many commits in a short time period) you may want to ask bzr to 
293
 
optimise the database indices. This can be done by the 'bzr pack' command.
294
 
 
295
 
By default just running 'bzr init' will create a repository within the new
296
 
branch but it is possible to create a shared repository which allows multiple
297
 
branches to share their information in the same location. When a new branch is
298
 
created it will first look to see if there is a containing shared repository it
299
 
can use.
300
 
 
301
 
When two branches of the same project share a repository, there is
302
 
generally a large space saving. For some operations (e.g. branching
303
 
within the repository) this translates in to a large time saving.
304
 
 
305
 
To create a shared repository use the init-repository command (or the alias
306
 
init-repo). This command takes the location of the repository to create. This
307
 
means that 'bzr init-repository repo' will create a directory named 'repo',
308
 
which contains a shared repository. Any new branches that are created in this
309
 
directory will then use it for storage.
310
 
 
311
 
It is a good idea to create a repository whenever you might create more
312
 
than one branch of a project. This is true for both working areas where you
313
 
are doing the development, and any server areas that you use for hosting
314
 
projects. In the latter case, it is common to want branches without working
315
 
trees. Since the files in the branch will not be edited directly there is no
316
 
need to use up disk space for a working tree. To create a repository in which
317
 
the branches will not have working trees pass the '--no-trees' option to
318
 
'init-repository'.
319
 
 
320
 
Related commands:
321
 
 
322
 
  init-repository   Create a shared repository. Use --no-trees to create one
323
 
                    in which new branches won't get a working tree.
324
 
"""
325
 
 
326
 
 
327
 
_working_trees = \
328
 
"""Working Trees
329
 
 
330
 
A working tree is the contents of a branch placed on disk so that you can
331
 
see the files and edit them. The working tree is where you make changes to a
332
 
branch, and when you commit the current state of the working tree is the
333
 
snapshot that is recorded in the commit.
334
 
 
335
 
When you push a branch to a remote system, a working tree will not be
336
 
created. If one is already present the files will not be updated. The
337
 
branch information will be updated and the working tree will be marked
338
 
as out-of-date. Updating a working tree remotely is difficult, as there
339
 
may be uncommitted changes or the update may cause content conflicts that are
340
 
difficult to deal with remotely.
341
 
 
342
 
If you have a branch with no working tree you can use the 'checkout' command
343
 
to create a working tree. If you run 'bzr checkout .' from the branch it will
344
 
create the working tree. If the branch is updated remotely, you can update the
345
 
working tree by running 'bzr update' in that directory.
346
 
 
347
 
If you have a branch with a working tree that you do not want the 'remove-tree'
348
 
command will remove the tree if it is safe. This can be done to avoid the
349
 
warning about the remote working tree not being updated when pushing to the
350
 
branch. It can also be useful when working with a '--no-trees' repository
351
 
(see 'bzr help repositories').
352
 
 
353
 
If you want to have a working tree on a remote machine that you push to you
354
 
can either run 'bzr update' in the remote branch after each push, or use some
355
 
other method to update the tree during the push. There is an 'rspush' plugin
356
 
that will update the working tree using rsync as well as doing a push. There
357
 
is also a 'push-and-update' plugin that automates running 'bzr update' via SSH
358
 
after each push.
359
 
 
360
 
Useful commands:
361
 
 
362
 
  checkout     Create a working tree when a branch does not have one.
363
 
  remove-tree  Removes the working tree from a branch when it is safe to do so.
364
 
  update       When a working tree is out of sync with it's associated branch
365
 
               this will update the tree to match the branch.
366
 
"""
367
 
 
368
 
_status_flags = \
369
 
"""Status Flags
370
 
 
371
 
Status flags are used to summarise changes to the working tree in a concise
372
 
manner.  They are in the form:
373
 
   xxx   <filename>
374
 
where the columns' meanings are as follows.
375
 
 
376
 
Column 1: versioning / renames
377
 
  + File versioned
378
 
  - File unversioned
379
 
  R File renamed
380
 
  ? File unknown
381
 
  C File has conflicts
382
 
  P Entry for a pending merge (not a file)
383
 
 
384
 
Column 2: Contents
385
 
  N File created
386
 
  D File deleted
387
 
  K File kind changed
388
 
  M File modified
389
 
 
390
 
Column 3: Execute
391
 
  * The execute bit was changed
392
 
"""
393
 
 
394
232
 
395
233
topic_registry.register("revisionspec", _help_on_revisionspec,
396
234
                        "Explain how to use --revision")
404
242
                        'Options that can be used with any command')
405
243
topic_registry.register('checkouts', _checkouts,
406
244
                        'Information on what a checkout is')
407
 
topic_registry.register('urlspec', _help_on_transport,
408
 
                        "Supported transport protocols")
409
 
topic_registry.register('status-flags', _status_flags,
410
 
                        "Help on status flags")
411
 
def get_bugs_topic(topic):
412
 
    from bzrlib import bugtracker
413
 
    return bugtracker.tracker_registry.help_topic(topic)
414
 
topic_registry.register('bugs', get_bugs_topic, 'Bug tracker support')
415
 
topic_registry.register('repositories', _repositories,
416
 
                        'Basic information on shared repositories.')
417
 
topic_registry.register('working-trees', _working_trees,
418
 
                        'Information on working trees')
419
 
 
420
 
 
421
 
class HelpTopicIndex(object):
422
 
    """A index for bzr help that returns topics."""
423
 
 
424
 
    def __init__(self):
425
 
        self.prefix = ''
426
 
 
427
 
    def get_topics(self, topic):
428
 
        """Search for topic in the HelpTopicRegistry.
429
 
 
430
 
        :param topic: A topic to search for. None is treated as 'basic'.
431
 
        :return: A list which is either empty or contains a single
432
 
            RegisteredTopic entry.
433
 
        """
434
 
        if topic is None:
435
 
            topic = 'basic'
436
 
        if topic in topic_registry:
437
 
            return [RegisteredTopic(topic)]
438
 
        else:
439
 
            return []
440
 
 
441
 
 
442
 
class RegisteredTopic(object):
443
 
    """A help topic which has been registered in the HelpTopicRegistry.
444
 
 
445
 
    These topics consist of nothing more than the name of the topic - all
446
 
    data is retrieved on demand from the registry.
447
 
    """
448
 
 
449
 
    def __init__(self, topic):
450
 
        """Constructor.
451
 
 
452
 
        :param topic: The name of the topic that this represents.
453
 
        """
454
 
        self.topic = topic
455
 
 
456
 
    def get_help_text(self, additional_see_also=None):
457
 
        """Return a string with the help for this topic.
458
 
 
459
 
        :param additional_see_also: Additional help topics to be
460
 
            cross-referenced.
461
 
        """
462
 
        result = topic_registry.get_detail(self.topic)
463
 
        # there is code duplicated here and in bzrlib/plugin.py's 
464
 
        # matching Topic code. This should probably be factored in
465
 
        # to a helper function and a common base class.
466
 
        if additional_see_also is not None:
467
 
            see_also = sorted(set(additional_see_also))
468
 
        else:
469
 
            see_also = None
470
 
        if see_also:
471
 
            result += '\nSee also: '
472
 
            result += ', '.join(see_also)
473
 
            result += '\n'
474
 
        return result
475
 
 
476
 
    def get_help_topic(self):
477
 
        """Return the help topic this can be found under."""
478
 
        return self.topic
479
245