~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

Merge fetch-spec-everything-not-in-other.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
21
21
from bzrlib.lazy_import import lazy_import
22
22
lazy_import(globals(), """
23
23
import cStringIO
24
 
import itertools
25
 
import re
26
24
import sys
27
25
import time
28
26
 
2052
2050
    @display_command
2053
2051
    def run(self, null=False, directory=u'.'):
2054
2052
        tree = WorkingTree.open_containing(directory)[0]
 
2053
        self.add_cleanup(tree.lock_read().unlock)
2055
2054
        td = tree.changes_from(tree.basis_tree())
 
2055
        self.cleanup_now()
2056
2056
        for path, id, kind, text_modified, meta_modified in td.modified:
2057
2057
            if null:
2058
2058
                self.outf.write(path + '\0')
3328
3328
 
3329
3329
 
3330
3330
class cmd_upgrade(Command):
3331
 
    __doc__ = """Upgrade branch storage to current format.
3332
 
 
3333
 
    The check command or bzr developers may sometimes advise you to run
3334
 
    this command. When the default format has changed you may also be warned
3335
 
    during other operations to upgrade.
 
3331
    __doc__ = """Upgrade a repository, branch or working tree to a newer format.
 
3332
 
 
3333
    When the default format has changed after a major new release of
 
3334
    Bazaar, you may be informed during certain operations that you
 
3335
    should upgrade. Upgrading to a newer format may improve performance
 
3336
    or make new features available. It may however limit interoperability
 
3337
    with older repositories or with older versions of Bazaar.
 
3338
 
 
3339
    If you wish to upgrade to a particular format rather than the
 
3340
    current default, that can be specified using the --format option.
 
3341
    As a consequence, you can use the upgrade command this way to
 
3342
    "downgrade" to an earlier format, though some conversions are
 
3343
    a one way process (e.g. changing from the 1.x default to the
 
3344
    2.x default) so downgrading is not always possible.
 
3345
 
 
3346
    A backup.bzr.~#~ directory is created at the start of the conversion
 
3347
    process (where # is a number). By default, this is left there on
 
3348
    completion. If the conversion fails, delete the new .bzr directory
 
3349
    and rename this one back in its place. Use the --clean option to ask
 
3350
    for the backup.bzr directory to be removed on successful conversion.
 
3351
    Alternatively, you can delete it by hand if everything looks good
 
3352
    afterwards.
 
3353
 
 
3354
    If the location given is a shared repository, dependent branches
 
3355
    are also converted provided the repository converts successfully.
 
3356
    If the conversion of a branch fails, remaining branches are still
 
3357
    tried.
 
3358
 
 
3359
    For more information on upgrades, see the Bazaar Upgrade Guide,
 
3360
    http://doc.bazaar.canonical.com/latest/en/upgrade-guide/.
3336
3361
    """
3337
3362
 
3338
 
    _see_also = ['check']
 
3363
    _see_also = ['check', 'reconcile', 'formats']
3339
3364
    takes_args = ['url?']
3340
3365
    takes_options = [
3341
 
                    RegistryOption('format',
3342
 
                        help='Upgrade to a specific format.  See "bzr help'
3343
 
                             ' formats" for details.',
3344
 
                        lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3345
 
                        converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3346
 
                        value_switches=True, title='Branch format'),
3347
 
                    ]
 
3366
        RegistryOption('format',
 
3367
            help='Upgrade to a specific format.  See "bzr help'
 
3368
                 ' formats" for details.',
 
3369
            lazy_registry=('bzrlib.bzrdir', 'format_registry'),
 
3370
            converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
 
3371
            value_switches=True, title='Branch format'),
 
3372
        Option('clean',
 
3373
            help='Remove the backup.bzr directory if successful.'),
 
3374
        Option('dry-run',
 
3375
            help="Show what would be done, but don't actually do anything."),
 
3376
    ]
3348
3377
 
3349
 
    def run(self, url='.', format=None):
 
3378
    def run(self, url='.', format=None, clean=False, dry_run=False):
3350
3379
        from bzrlib.upgrade import upgrade
3351
 
        upgrade(url, format)
 
3380
        exceptions = upgrade(url, format, clean_up=clean, dry_run=dry_run)
 
3381
        if exceptions:
 
3382
            if len(exceptions) == 1:
 
3383
                # Compatibility with historical behavior
 
3384
                raise exceptions[0]
 
3385
            else:
 
3386
                return 3
3352
3387
 
3353
3388
 
3354
3389
class cmd_whoami(Command):
5447
5482
    takes_options = [
5448
5483
        custom_help('directory',
5449
5484
            help='Branch whose tags should be displayed.'),
5450
 
        RegistryOption.from_kwargs('sort',
 
5485
        RegistryOption('sort',
5451
5486
            'Sort tags by different criteria.', title='Sorting',
5452
 
            natural='Sort numeric substrings as numbers:'
5453
 
                    ' suitable for version numbers. (default)',
5454
 
            alpha='Sort tags lexicographically.',
5455
 
            time='Sort tags chronologically.',
 
5487
            lazy_registry=('bzrlib.tag', 'tag_sort_methods')
5456
5488
            ),
5457
5489
        'show-ids',
5458
5490
        'revision',
5459
5491
    ]
5460
5492
 
5461
5493
    @display_command
5462
 
    def run(self,
5463
 
            directory='.',
5464
 
            sort='natural',
5465
 
            show_ids=False,
5466
 
            revision=None,
5467
 
            ):
 
5494
    def run(self, directory='.', sort=None, show_ids=False, revision=None):
 
5495
        from bzrlib.tag import tag_sort_methods
5468
5496
        branch, relpath = Branch.open_containing(directory)
5469
5497
 
5470
5498
        tags = branch.tags.get_tag_dict().items()
5479
5507
            # only show revisions between revid1 and revid2 (inclusive)
5480
5508
            tags = [(tag, revid) for tag, revid in tags if
5481
5509
                graph.is_between(revid, revid1, revid2)]
5482
 
        if sort == 'natural':
5483
 
            def natural_sort_key(tag):
5484
 
                return [f(s) for f,s in 
5485
 
                        zip(itertools.cycle((unicode.lower,int)),
5486
 
                                            re.split('([0-9]+)', tag[0]))]
5487
 
            tags.sort(key=natural_sort_key)
5488
 
        elif sort == 'alpha':
5489
 
            tags.sort()
5490
 
        elif sort == 'time':
5491
 
            timestamps = {}
5492
 
            for tag, revid in tags:
5493
 
                try:
5494
 
                    revobj = branch.repository.get_revision(revid)
5495
 
                except errors.NoSuchRevision:
5496
 
                    timestamp = sys.maxint # place them at the end
5497
 
                else:
5498
 
                    timestamp = revobj.timestamp
5499
 
                timestamps[revid] = timestamp
5500
 
            tags.sort(key=lambda x: timestamps[x[1]])
 
5510
        if sort is None:
 
5511
            sort = tag_sort_methods.get()
 
5512
        sort(branch, tags)
5501
5513
        if not show_ids:
5502
5514
            # [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5503
5515
            for index, (tag, revid) in enumerate(tags):