~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-09-06 11:33:42 UTC
  • mfrom: (5409.1.1 cleanup)
  • Revision ID: pqm@pqm.ubuntu.com-20100906113342-s41muavhjutdc7xr
(vila) Cleanup imports in bt.per_wt.test_pull (most of them were useless).
 (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
250
250
    To skip the display of pending merge information altogether, use
251
251
    the no-pending option or specify a file/directory.
252
252
 
253
 
    To compare the working directory to a specific revision, pass a
254
 
    single revision to the revision argument.
255
 
 
256
 
    To see which files have changed in a specific revision, or between
257
 
    two revisions, pass a revision range to the revision argument.
258
 
    This will produce the same results as calling 'bzr diff --summarize'.
 
253
    If a revision argument is given, the status is calculated against
 
254
    that revision, or between two revisions if two are provided.
259
255
    """
260
256
 
261
257
    # TODO: --no-recurse, --recurse options
927
923
                 "branch.  Local pulls are not applied to "
928
924
                 "the master branch."
929
925
            ),
930
 
        Option('show-base',
931
 
            help="Show base revision text in conflicts.")
932
926
        ]
933
927
    takes_args = ['location?']
934
928
    encoding_type = 'replace'
935
929
 
936
930
    def run(self, location=None, remember=False, overwrite=False,
937
931
            revision=None, verbose=False,
938
 
            directory=None, local=False,
939
 
            show_base=False):
 
932
            directory=None, local=False):
940
933
        # FIXME: too much stuff is in the command class
941
934
        revision_id = None
942
935
        mergeable = None
951
944
            branch_to = Branch.open_containing(directory)[0]
952
945
            self.add_cleanup(branch_to.lock_write().unlock)
953
946
 
954
 
        if tree_to is None and show_base:
955
 
            raise errors.BzrCommandError("Need working tree for --show-base.")
956
 
 
957
947
        if local and not branch_to.get_bound_location():
958
948
            raise errors.LocalRequiresBoundBranch()
959
949
 
1004
994
                view_info=view_info)
1005
995
            result = tree_to.pull(
1006
996
                branch_from, overwrite, revision_id, change_reporter,
1007
 
                possible_transports=possible_transports, local=local,
1008
 
                show_base=show_base)
 
997
                possible_transports=possible_transports, local=local)
1009
998
        else:
1010
999
            result = branch_to.pull(
1011
1000
                branch_from, overwrite, revision_id, local=local)
1067
1056
        Option('strict',
1068
1057
               help='Refuse to push if there are uncommitted changes in'
1069
1058
               ' the working tree, --no-strict disables the check.'),
1070
 
        Option('no-tree',
1071
 
               help="Don't populate the working tree, even for protocols"
1072
 
               " that support it."),
1073
1059
        ]
1074
1060
    takes_args = ['location?']
1075
1061
    encoding_type = 'replace'
1077
1063
    def run(self, location=None, remember=False, overwrite=False,
1078
1064
        create_prefix=False, verbose=False, revision=None,
1079
1065
        use_existing_dir=False, directory=None, stacked_on=None,
1080
 
        stacked=False, strict=None, no_tree=False):
 
1066
        stacked=False, strict=None):
1081
1067
        from bzrlib.push import _show_push_branch
1082
1068
 
1083
1069
        if directory is None:
1129
1115
        _show_push_branch(br_from, revision_id, location, self.outf,
1130
1116
            verbose=verbose, overwrite=overwrite, remember=remember,
1131
1117
            stacked_on=stacked_on, create_prefix=create_prefix,
1132
 
            use_existing_dir=use_existing_dir, no_tree=no_tree)
 
1118
            use_existing_dir=use_existing_dir)
1133
1119
 
1134
1120
 
1135
1121
class cmd_branch(Command):
1368
1354
    If you want to discard your local changes, you can just do a
1369
1355
    'bzr revert' instead of 'bzr commit' after the update.
1370
1356
 
1371
 
    If you want to restore a file that has been removed locally, use
1372
 
    'bzr revert' instead of 'bzr update'.
1373
 
 
1374
1357
    If the tree's branch is bound to a master branch, it will also update
1375
1358
    the branch from the master.
1376
1359
    """
1377
1360
 
1378
1361
    _see_also = ['pull', 'working-trees', 'status-flags']
1379
1362
    takes_args = ['dir?']
1380
 
    takes_options = ['revision',
1381
 
                     Option('show-base',
1382
 
                            help="Show base revision text in conflicts."),
1383
 
                     ]
 
1363
    takes_options = ['revision']
1384
1364
    aliases = ['up']
1385
1365
 
1386
 
    def run(self, dir='.', revision=None, show_base=None):
 
1366
    def run(self, dir='.', revision=None):
1387
1367
        if revision is not None and len(revision) != 1:
1388
1368
            raise errors.BzrCommandError(
1389
1369
                        "bzr update --revision takes exactly one revision")
1429
1409
                change_reporter,
1430
1410
                possible_transports=possible_transports,
1431
1411
                revision=revision_id,
1432
 
                old_tip=old_tip,
1433
 
                show_base=show_base)
 
1412
                old_tip=old_tip)
1434
1413
        except errors.NoSuchRevision, e:
1435
1414
            raise errors.BzrCommandError(
1436
1415
                                  "branch has no revision %s\n"
1512
1491
            title='Deletion Strategy', value_switches=True, enum_switch=False,
1513
1492
            safe='Backup changed files (default).',
1514
1493
            keep='Delete from bzr but leave the working copy.',
1515
 
            no_backup='Don\'t backup changed files.',
1516
1494
            force='Delete all the specified files, even if they can not be '
1517
 
                'recovered and even if they are non-empty directories. '
1518
 
                '(deprecated, use no-backup)')]
 
1495
                'recovered and even if they are non-empty directories.')]
1519
1496
    aliases = ['rm', 'del']
1520
1497
    encoding_type = 'replace'
1521
1498
 
1522
1499
    def run(self, file_list, verbose=False, new=False,
1523
1500
        file_deletion_strategy='safe'):
1524
 
        if file_deletion_strategy == 'force':
1525
 
            note("(The --force option is deprecated, rather use --no-backup "
1526
 
                "in future.)")
1527
 
            file_deletion_strategy = 'no-backup'
1528
 
 
1529
1501
        tree, file_list = WorkingTree.open_containing_paths(file_list)
1530
1502
 
1531
1503
        if file_list is not None:
1552
1524
            file_deletion_strategy = 'keep'
1553
1525
        tree.remove(file_list, verbose=verbose, to_file=self.outf,
1554
1526
            keep_files=file_deletion_strategy=='keep',
1555
 
            force=(file_deletion_strategy=='no-backup'))
 
1527
            force=file_deletion_strategy=='force')
1556
1528
 
1557
1529
 
1558
1530
class cmd_file_id(Command):
1713
1685
                ),
1714
1686
         Option('append-revisions-only',
1715
1687
                help='Never change revnos or the existing log.'
1716
 
                '  Append revisions to it only.'),
1717
 
         Option('no-tree',
1718
 
                'Create a branch without a working tree.')
 
1688
                '  Append revisions to it only.')
1719
1689
         ]
1720
1690
    def run(self, location=None, format=None, append_revisions_only=False,
1721
 
            create_prefix=False, no_tree=False):
 
1691
            create_prefix=False):
1722
1692
        if format is None:
1723
1693
            format = bzrdir.format_registry.make_bzrdir('default')
1724
1694
        if location is None:
1747
1717
        except errors.NotBranchError:
1748
1718
            # really a NotBzrDir error...
1749
1719
            create_branch = bzrdir.BzrDir.create_branch_convenience
1750
 
            if no_tree:
1751
 
                force_new_tree = False
1752
 
            else:
1753
 
                force_new_tree = None
1754
1720
            branch = create_branch(to_transport.base, format=format,
1755
 
                                   possible_transports=[to_transport],
1756
 
                                   force_new_tree=force_new_tree)
 
1721
                                   possible_transports=[to_transport])
1757
1722
            a_bzrdir = branch.bzrdir
1758
1723
        else:
1759
1724
            from bzrlib.transport.local import LocalTransport
1763
1728
                        raise errors.BranchExistsWithoutWorkingTree(location)
1764
1729
                raise errors.AlreadyBranchError(location)
1765
1730
            branch = a_bzrdir.create_branch()
1766
 
            if not no_tree:
1767
 
                a_bzrdir.create_workingtree()
 
1731
            a_bzrdir.create_workingtree()
1768
1732
        if append_revisions_only:
1769
1733
            try:
1770
1734
                branch.set_append_revisions_only(True)
1864
1828
    "bzr diff -p1" is equivalent to "bzr diff --prefix old/:new/", and
1865
1829
    produces patches suitable for "patch -p1".
1866
1830
 
1867
 
    Note that when using the -r argument with a range of revisions, the
1868
 
    differences are computed between the two specified revisions.  That
1869
 
    is, the command does not show the changes introduced by the first 
1870
 
    revision in the range.  This differs from the interpretation of 
1871
 
    revision ranges used by "bzr log" which includes the first revision
1872
 
    in the range.
1873
 
 
1874
1831
    :Exit values:
1875
1832
        1 - changed
1876
1833
        2 - unrepresentable changes
1894
1851
 
1895
1852
            bzr diff -r1..3 xxx
1896
1853
 
1897
 
        The changes introduced by revision 2 (equivalent to -r1..2)::
1898
 
 
1899
 
            bzr diff -c2
1900
 
 
1901
 
        To see the changes introduced by revision X::
 
1854
        To see the changes introduced in revision X::
1902
1855
        
1903
1856
            bzr diff -cX
1904
1857
 
1908
1861
 
1909
1862
            bzr diff -r<chosen_parent>..X
1910
1863
 
1911
 
        The changes between the current revision and the previous revision
1912
 
        (equivalent to -c-1 and -r-2..-1)
 
1864
        The changes introduced by revision 2 (equivalent to -r1..2)::
1913
1865
 
1914
 
            bzr diff -r-2..
 
1866
            bzr diff -c2
1915
1867
 
1916
1868
        Show just the differences for file NEWS::
1917
1869
 
2686
2638
    Patterns prefixed with '!!' act as regular ignore patterns, but have
2687
2639
    precedence over the '!' exception patterns.
2688
2640
 
2689
 
    :Notes: 
2690
 
        
2691
 
    * Ignore patterns containing shell wildcards must be quoted from
2692
 
      the shell on Unix.
2693
 
 
2694
 
    * Ignore patterns starting with "#" act as comments in the ignore file.
2695
 
      To ignore patterns that begin with that character, use the "RE:" prefix.
 
2641
    Note: ignore patterns containing shell wildcards must be quoted from
 
2642
    the shell on Unix.
2696
2643
 
2697
2644
    :Examples:
2698
2645
        Ignore the top level Makefile::
2707
2654
 
2708
2655
            bzr ignore "!special.class"
2709
2656
 
2710
 
        Ignore files whose name begins with the "#" character::
2711
 
 
2712
 
            bzr ignore "RE:^#"
2713
 
 
2714
2657
        Ignore .o files under the lib directory::
2715
2658
 
2716
2659
            bzr ignore "lib/**/*.o"
3326
3269
 
3327
3270
 
3328
3271
class cmd_upgrade(Command):
3329
 
    __doc__ = """Upgrade a repository, branch or working tree to a newer format.
3330
 
 
3331
 
    When the default format has changed after a major new release of
3332
 
    Bazaar, you may be informed during certain operations that you
3333
 
    should upgrade. Upgrading to a newer format may improve performance
3334
 
    or make new features available. It may however limit interoperability
3335
 
    with older repositories or with older versions of Bazaar.
3336
 
 
3337
 
    If you wish to upgrade to a particular format rather than the
3338
 
    current default, that can be specified using the --format option.
3339
 
    As a consequence, you can use the upgrade command this way to
3340
 
    "downgrade" to an earlier format, though some conversions are
3341
 
    a one way process (e.g. changing from the 1.x default to the
3342
 
    2.x default) so downgrading is not always possible.
3343
 
 
3344
 
    A backup.bzr.~#~ directory is created at the start of the conversion
3345
 
    process (where # is a number). By default, this is left there on
3346
 
    completion. If the conversion fails, delete the new .bzr directory
3347
 
    and rename this one back in its place. Use the --clean option to ask
3348
 
    for the backup.bzr directory to be removed on successful conversion.
3349
 
    Alternatively, you can delete it by hand if everything looks good
3350
 
    afterwards.
3351
 
 
3352
 
    If the location given is a shared repository, dependent branches
3353
 
    are also converted provided the repository converts successfully.
3354
 
    If the conversion of a branch fails, remaining branches are still
3355
 
    tried.
3356
 
 
3357
 
    For more information on upgrades, see the Bazaar Upgrade Guide,
3358
 
    http://doc.bazaar.canonical.com/latest/en/upgrade-guide/.
 
3272
    __doc__ = """Upgrade branch storage to current format.
 
3273
 
 
3274
    The check command or bzr developers may sometimes advise you to run
 
3275
    this command. When the default format has changed you may also be warned
 
3276
    during other operations to upgrade.
3359
3277
    """
3360
3278
 
3361
 
    _see_also = ['check', 'reconcile', 'formats']
 
3279
    _see_also = ['check']
3362
3280
    takes_args = ['url?']
3363
3281
    takes_options = [
3364
 
        RegistryOption('format',
3365
 
            help='Upgrade to a specific format.  See "bzr help'
3366
 
                 ' formats" for details.',
3367
 
            lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3368
 
            converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3369
 
            value_switches=True, title='Branch format'),
3370
 
        Option('clean',
3371
 
            help='Remove the backup.bzr directory if successful.'),
3372
 
        Option('dry-run',
3373
 
            help="Show what would be done, but don't actually do anything."),
3374
 
    ]
 
3282
                    RegistryOption('format',
 
3283
                        help='Upgrade to a specific format.  See "bzr help'
 
3284
                             ' formats" for details.',
 
3285
                        lazy_registry=('bzrlib.bzrdir', 'format_registry'),
 
3286
                        converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
 
3287
                        value_switches=True, title='Branch format'),
 
3288
                    ]
3375
3289
 
3376
 
    def run(self, url='.', format=None, clean=False, dry_run=False):
 
3290
    def run(self, url='.', format=None):
3377
3291
        from bzrlib.upgrade import upgrade
3378
 
        exceptions = upgrade(url, format, clean_up=clean, dry_run=dry_run)
3379
 
        if exceptions:
3380
 
            if len(exceptions) == 1:
3381
 
                # Compatibility with historical behavior
3382
 
                raise exceptions[0]
3383
 
            else:
3384
 
                return 3
 
3292
        upgrade(url, format)
3385
3293
 
3386
3294
 
3387
3295
class cmd_whoami(Command):
3573
3481
    If you set BZR_TEST_PDB=1 when running selftest, failing tests will drop
3574
3482
    into a pdb postmortem session.
3575
3483
 
3576
 
    The --coverage=DIRNAME global option produces a report with covered code
3577
 
    indicated.
3578
 
 
3579
3484
    :Examples:
3580
3485
        Run only tests relating to 'ignore'::
3581
3486
 
3782
3687
    with bzr send. If neither is specified, the default is the upstream branch
3783
3688
    or the branch most recently merged using --remember.
3784
3689
 
3785
 
    When merging from a branch, by default bzr will try to merge in all new
3786
 
    work from the other branch, automatically determining an appropriate base
3787
 
    revision.  If this fails, you may need to give an explicit base.
3788
 
 
3789
 
    To pick a different ending revision, pass "--revision OTHER".  bzr will
3790
 
    try to merge in all new work up to and including revision OTHER.
3791
 
 
3792
 
    If you specify two values, "--revision BASE..OTHER", only revisions BASE
3793
 
    through OTHER, excluding BASE but including OTHER, will be merged.  If this
3794
 
    causes some revisions to be skipped, i.e. if the destination branch does
3795
 
    not already contain revision BASE, such a merge is commonly referred to as
3796
 
    a "cherrypick".
3797
 
 
3798
 
    Revision numbers are always relative to the source branch.
 
3690
    When merging a branch, by default the tip will be merged. To pick a different
 
3691
    revision, pass --revision. If you specify two values, the first will be used as
 
3692
    BASE and the second one as OTHER. Merging individual revisions, or a subset of
 
3693
    available revisions, like this is commonly referred to as "cherrypicking".
 
3694
 
 
3695
    Revision numbers are always relative to the branch being merged.
 
3696
 
 
3697
    By default, bzr will try to merge in all new work from the other
 
3698
    branch, automatically determining an appropriate base.  If this
 
3699
    fails, you may need to give an explicit base.
3799
3700
 
3800
3701
    Merge will do its best to combine the changes in two branches, but there
3801
3702
    are some kinds of problems only a human can fix.  When it encounters those,
3825
3726
    you to apply each diff hunk and file change, similar to "shelve".
3826
3727
 
3827
3728
    :Examples:
3828
 
        To merge all new revisions from bzr.dev::
 
3729
        To merge the latest revision from bzr.dev::
3829
3730
 
3830
3731
            bzr merge ../bzr.dev
3831
3732
 
4065
3966
        if ((remember or tree.branch.get_submit_branch() is None) and
4066
3967
             user_location is not None):
4067
3968
            tree.branch.set_submit_branch(other_branch.base)
4068
 
        # Merge tags (but don't set them in the master branch yet, the user
4069
 
        # might revert this merge).  Commit will propagate them.
4070
 
        _merge_tags_if_possible(other_branch, tree.branch, ignore_master=True)
 
3969
        _merge_tags_if_possible(other_branch, tree.branch)
4071
3970
        merger = _mod_merge.Merger.from_revision_ids(pb, tree,
4072
3971
            other_revision_id, base_revision_id, other_branch, base_branch)
4073
3972
        if other_path != '':
4241
4140
    last committed revision is used.
4242
4141
 
4243
4142
    To remove only some changes, without reverting to a prior version, use
4244
 
    merge instead.  For example, "merge . -r -2..-3" (don't forget the ".")
4245
 
    will remove the changes introduced by the second last commit (-2), without
4246
 
    affecting the changes introduced by the last commit (-1).  To remove
4247
 
    certain changes on a hunk-by-hunk basis, see the shelve command.
 
4143
    merge instead.  For example, "merge . --revision -2..-3" will remove the
 
4144
    changes introduced by -2, without affecting the changes introduced by -1.
 
4145
    Or to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
4248
4146
 
4249
4147
    By default, any files that have been manually changed will be backed up
4250
4148
    first.  (Files changed only by merge are not backed up.)  Backup files have
4280
4178
    target branches.
4281
4179
    """
4282
4180
 
4283
 
    _see_also = ['cat', 'export', 'merge', 'shelve']
 
4181
    _see_also = ['cat', 'export']
4284
4182
    takes_options = [
4285
4183
        'revision',
4286
4184
        Option('no-backup', "Do not save backups of reverted files."),
4900
4798
            self.outf.write('The above revision(s) will be removed.\n')
4901
4799
 
4902
4800
        if not force:
4903
 
            if not ui.ui_factory.confirm_action(
4904
 
                    'Uncommit these revisions',
4905
 
                    'bzrlib.builtins.uncommit',
4906
 
                    {}):
4907
 
                self.outf.write('Canceled\n')
 
4801
            if not ui.ui_factory.get_boolean('Are you sure'):
 
4802
                self.outf.write('Canceled')
4908
4803
                return 0
4909
4804
 
4910
4805
        mutter('Uncommitting from {%s} to {%s}',
4937
4832
    takes_options = [
4938
4833
        Option('config',
4939
4834
               help='LOCATION is the directory where the config lock is.'),
4940
 
        Option('force',
4941
 
            help='Do not ask for confirmation before breaking the lock.'),
4942
4835
        ]
4943
4836
 
4944
 
    def run(self, location=None, config=False, force=False):
 
4837
    def run(self, location=None, config=False):
4945
4838
        if location is None:
4946
4839
            location = u'.'
4947
 
        if force:
4948
 
            ui.ui_factory = ui.ConfirmationUserInterfacePolicy(ui.ui_factory,
4949
 
                None,
4950
 
                {'bzrlib.lockdir.break': True})
4951
4840
        if config:
4952
4841
            conf = _mod_config.LockableConfig(file_name=location)
4953
4842
            conf.break_lock()
5047
4936
    not part of it.  (Such trees can be produced by "bzr split", but also by
5048
4937
    running "bzr branch" with the target inside a tree.)
5049
4938
 
5050
 
    The result is a combined tree, with the subtree no longer an independent
 
4939
    The result is a combined tree, with the subtree no longer an independant
5051
4940
    part.  This is marked as a merge of the subtree into the containing tree,
5052
4941
    and all history is preserved.
5053
4942
    """
5449
5338
            if tag_name is None:
5450
5339
                raise errors.BzrCommandError("No tag specified to delete.")
5451
5340
            branch.tags.delete_tag(tag_name)
5452
 
            note('Deleted tag %s.' % tag_name)
 
5341
            self.outf.write('Deleted tag %s.\n' % tag_name)
5453
5342
        else:
5454
5343
            if revision:
5455
5344
                if len(revision) != 1:
5467
5356
            if (not force) and branch.tags.has_tag(tag_name):
5468
5357
                raise errors.TagAlreadyExists(tag_name)
5469
5358
            branch.tags.set_tag(tag_name, revision_id)
5470
 
            note('Created tag %s.' % tag_name)
 
5359
            self.outf.write('Created tag %s.\n' % tag_name)
5471
5360
 
5472
5361
 
5473
5362
class cmd_tags(Command):
5480
5369
    takes_options = [
5481
5370
        custom_help('directory',
5482
5371
            help='Branch whose tags should be displayed.'),
5483
 
        RegistryOption('sort',
 
5372
        RegistryOption.from_kwargs('sort',
5484
5373
            'Sort tags by different criteria.', title='Sorting',
5485
 
            lazy_registry=('bzrlib.tag', 'tag_sort_methods')
 
5374
            alpha='Sort tags lexicographically (default).',
 
5375
            time='Sort tags chronologically.',
5486
5376
            ),
5487
5377
        'show-ids',
5488
5378
        'revision',
5489
5379
    ]
5490
5380
 
5491
5381
    @display_command
5492
 
    def run(self, directory='.', sort=None, show_ids=False, revision=None):
5493
 
        from bzrlib.tag import tag_sort_methods
 
5382
    def run(self,
 
5383
            directory='.',
 
5384
            sort='alpha',
 
5385
            show_ids=False,
 
5386
            revision=None,
 
5387
            ):
5494
5388
        branch, relpath = Branch.open_containing(directory)
5495
5389
 
5496
5390
        tags = branch.tags.get_tag_dict().items()
5505
5399
            # only show revisions between revid1 and revid2 (inclusive)
5506
5400
            tags = [(tag, revid) for tag, revid in tags if
5507
5401
                graph.is_between(revid, revid1, revid2)]
5508
 
        if sort is None:
5509
 
            sort = tag_sort_methods.get()
5510
 
        sort(branch, tags)
 
5402
        if sort == 'alpha':
 
5403
            tags.sort()
 
5404
        elif sort == 'time':
 
5405
            timestamps = {}
 
5406
            for tag, revid in tags:
 
5407
                try:
 
5408
                    revobj = branch.repository.get_revision(revid)
 
5409
                except errors.NoSuchRevision:
 
5410
                    timestamp = sys.maxint # place them at the end
 
5411
                else:
 
5412
                    timestamp = revobj.timestamp
 
5413
                timestamps[revid] = timestamp
 
5414
            tags.sort(key=lambda x: timestamps[x[1]])
5511
5415
        if not show_ids:
5512
5416
            # [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5513
5417
            for index, (tag, revid) in enumerate(tags):
5911
5815
            location = "."
5912
5816
        branch = Branch.open_containing(location)[0]
5913
5817
        branch.bzrdir.destroy_branch()
5914
 
 
 
5818
        
5915
5819
 
5916
5820
class cmd_shelve(Command):
5917
5821
    __doc__ = """Temporarily set aside some changes from the current tree.
5936
5840
 
5937
5841
    You can put multiple items on the shelf, and by default, 'unshelve' will
5938
5842
    restore the most recently shelved changes.
5939
 
 
5940
 
    For complicated changes, it is possible to edit the changes in a separate
5941
 
    editor program to decide what the file remaining in the working copy
5942
 
    should look like.  To do this, add the configuration option
5943
 
 
5944
 
        change_editor = PROGRAM @new_path @old_path
5945
 
 
5946
 
    where @new_path is replaced with the path of the new version of the 
5947
 
    file and @old_path is replaced with the path of the old version of 
5948
 
    the file.  The PROGRAM should save the new file with the desired 
5949
 
    contents of the file in the working tree.
5950
 
        
5951
5843
    """
5952
5844
 
5953
5845
    takes_args = ['file*']
5965
5857
        Option('destroy',
5966
5858
               help='Destroy removed changes instead of shelving them.'),
5967
5859
    ]
5968
 
    _see_also = ['unshelve', 'configuration']
 
5860
    _see_also = ['unshelve']
5969
5861
 
5970
5862
    def run(self, revision=None, all=False, file_list=None, message=None,
5971
 
            writer=None, list=False, destroy=False, directory=None):
 
5863
            writer=None, list=False, destroy=False, directory=u'.'):
5972
5864
        if list:
5973
 
            return self.run_for_list(directory=directory)
 
5865
            return self.run_for_list()
5974
5866
        from bzrlib.shelf_ui import Shelver
5975
5867
        if writer is None:
5976
5868
            writer = bzrlib.option.diff_writer_registry.get()
5984
5876
        except errors.UserAbort:
5985
5877
            return 0
5986
5878
 
5987
 
    def run_for_list(self, directory=None):
5988
 
        if directory is None:
5989
 
            directory = u'.'
5990
 
        tree = WorkingTree.open_containing(directory)[0]
 
5879
    def run_for_list(self):
 
5880
        tree = WorkingTree.open_containing('.')[0]
5991
5881
        self.add_cleanup(tree.lock_read().unlock)
5992
5882
        manager = tree.get_shelf_manager()
5993
5883
        shelves = manager.active_shelves()
6122
6012
    # be only called once.
6123
6013
    for (name, aliases, module_name) in [
6124
6014
        ('cmd_bundle_info', [], 'bzrlib.bundle.commands'),
6125
 
        ('cmd_config', [], 'bzrlib.config'),
6126
6015
        ('cmd_dpush', [], 'bzrlib.foreign'),
6127
6016
        ('cmd_version_info', [], 'bzrlib.cmd_version_info'),
6128
6017
        ('cmd_resolve', ['resolved'], 'bzrlib.conflicts'),
6129
6018
        ('cmd_conflicts', [], 'bzrlib.conflicts'),
6130
6019
        ('cmd_sign_my_commits', [], 'bzrlib.sign_my_commits'),
6131
 
        ('cmd_test_script', [], 'bzrlib.cmd_test_script'),
6132
6020
        ]:
6133
6021
        builtin_command_registry.register_lazy(name, aliases, module_name)