253
250
To skip the display of pending merge information altogether, use
254
251
the no-pending option or specify a file/directory.
256
To compare the working directory to a specific revision, pass a
257
single revision to the revision argument.
259
To see which files have changed in a specific revision, or between
260
two revisions, pass a revision range to the revision argument.
261
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.
264
257
# TODO: --no-recurse, --recurse options
488
477
d.destroy_workingtree()
491
class cmd_repair_workingtree(Command):
492
__doc__ = """Reset the working tree state file.
494
This is not meant to be used normally, but more as a way to recover from
495
filesystem corruption, etc. This rebuilds the working inventory back to a
496
'known good' state. Any new modifications (adding a file, renaming, etc)
497
will be lost, though modified files will still be detected as such.
499
Most users will want something more like "bzr revert" or "bzr update"
500
unless the state file has become corrupted.
502
By default this attempts to recover the current state by looking at the
503
headers of the state file. If the state file is too corrupted to even do
504
that, you can supply --revision to force the state of the tree.
507
takes_options = ['revision', 'directory',
509
help='Reset the tree even if it doesn\'t appear to be'
514
def run(self, revision=None, directory='.', force=False):
515
tree, _ = WorkingTree.open_containing(directory)
516
self.add_cleanup(tree.lock_tree_write().unlock)
520
except errors.BzrError:
521
pass # There seems to be a real error here, so we'll reset
524
raise errors.BzrCommandError(
525
'The tree does not appear to be corrupt. You probably'
526
' want "bzr revert" instead. Use "--force" if you are'
527
' sure you want to reset the working tree.')
531
revision_ids = [r.as_revision_id(tree.branch) for r in revision]
533
tree.reset_state(revision_ids)
534
except errors.BzrError, e:
535
if revision_ids is None:
536
extra = (', the header appears corrupt, try passing -r -1'
537
' to set the state to the last commit')
540
raise errors.BzrCommandError('failed to reset the tree state'
544
480
class cmd_revno(Command):
545
481
__doc__ = """Show current revision number.
966
901
match the remote one, use pull --overwrite. This will work even if the two
967
902
branches have diverged.
969
If there is no default location set, the first pull will set it (use
970
--no-remember to avoid settting it). After that, you can omit the
971
location to use the default. To change the default, use --remember. The
972
value will only be saved if the remote location can be accessed.
904
If there is no default location set, the first pull will set it. After
905
that, you can omit the location to use the default. To change the
906
default, use --remember. The value will only be saved if the remote
907
location can be accessed.
974
909
Note: The location can be specified either in the form of a branch,
975
910
or in the form of a path to a file containing a merge directive generated
988
923
"branch. Local pulls are not applied to "
989
924
"the master branch."
992
help="Show base revision text in conflicts.")
994
927
takes_args = ['location?']
995
928
encoding_type = 'replace'
997
def run(self, location=None, remember=None, overwrite=False,
930
def run(self, location=None, remember=False, overwrite=False,
998
931
revision=None, verbose=False,
999
directory=None, local=False,
932
directory=None, local=False):
1001
933
# FIXME: too much stuff is in the command class
1002
934
revision_id = None
1003
935
mergeable = None
1103
1026
do a merge (see bzr help merge) from the other branch, and commit that.
1104
1027
After that you will be able to do a push without '--overwrite'.
1106
If there is no default push location set, the first push will set it (use
1107
--no-remember to avoid settting it). After that, you can omit the
1108
location to use the default. To change the default, use --remember. The
1109
value will only be saved if the remote location can be accessed.
1029
If there is no default push location set, the first push will set it.
1030
After that, you can omit the location to use the default. To change the
1031
default, use --remember. The value will only be saved if the remote
1032
location can be accessed.
1112
1035
_see_also = ['pull', 'update', 'working-trees']
1133
1056
Option('strict',
1134
1057
help='Refuse to push if there are uncommitted changes in'
1135
1058
' the working tree, --no-strict disables the check.'),
1137
help="Don't populate the working tree, even for protocols"
1138
" that support it."),
1140
1060
takes_args = ['location?']
1141
1061
encoding_type = 'replace'
1143
def run(self, location=None, remember=None, overwrite=False,
1063
def run(self, location=None, remember=False, overwrite=False,
1144
1064
create_prefix=False, verbose=False, revision=None,
1145
1065
use_existing_dir=False, directory=None, stacked_on=None,
1146
stacked=False, strict=None, no_tree=False):
1066
stacked=False, strict=None):
1147
1067
from bzrlib.push import _show_push_branch
1149
1069
if directory is None:
1195
1115
_show_push_branch(br_from, revision_id, location, self.outf,
1196
1116
verbose=verbose, overwrite=overwrite, remember=remember,
1197
1117
stacked_on=stacked_on, create_prefix=create_prefix,
1198
use_existing_dir=use_existing_dir, no_tree=no_tree)
1118
use_existing_dir=use_existing_dir)
1201
1121
class cmd_branch(Command):
1247
1165
files_from=None):
1248
1166
from bzrlib import switch as _mod_switch
1249
1167
from bzrlib.tag import _merge_tags_if_possible
1250
if self.invoked_as in ['get', 'clone']:
1251
ui.ui_factory.show_user_warning(
1252
'deprecated_command',
1253
deprecated_name=self.invoked_as,
1254
recommended_name='branch',
1255
deprecated_in_version='2.4')
1256
1168
accelerator_tree, br_from = bzrdir.BzrDir.open_tree_or_branch(
1258
1170
if not (hardlink or files_from):
1442
1354
If you want to discard your local changes, you can just do a
1443
1355
'bzr revert' instead of 'bzr commit' after the update.
1445
If you want to restore a file that has been removed locally, use
1446
'bzr revert' instead of 'bzr update'.
1448
1357
If the tree's branch is bound to a master branch, it will also update
1449
1358
the branch from the master.
1452
1361
_see_also = ['pull', 'working-trees', 'status-flags']
1453
1362
takes_args = ['dir?']
1454
takes_options = ['revision',
1456
help="Show base revision text in conflicts."),
1363
takes_options = ['revision']
1458
1364
aliases = ['up']
1460
def run(self, dir='.', revision=None, show_base=None):
1366
def run(self, dir='.', revision=None):
1461
1367
if revision is not None and len(revision) != 1:
1462
1368
raise errors.BzrCommandError(
1463
1369
"bzr update --revision takes exactly one revision")
1586
1491
title='Deletion Strategy', value_switches=True, enum_switch=False,
1587
1492
safe='Backup changed files (default).',
1588
1493
keep='Delete from bzr but leave the working copy.',
1589
no_backup='Don\'t backup changed files.',
1590
1494
force='Delete all the specified files, even if they can not be '
1591
'recovered and even if they are non-empty directories. '
1592
'(deprecated, use no-backup)')]
1495
'recovered and even if they are non-empty directories.')]
1593
1496
aliases = ['rm', 'del']
1594
1497
encoding_type = 'replace'
1596
1499
def run(self, file_list, verbose=False, new=False,
1597
1500
file_deletion_strategy='safe'):
1598
if file_deletion_strategy == 'force':
1599
note("(The --force option is deprecated, rather use --no-backup "
1601
file_deletion_strategy = 'no-backup'
1603
1501
tree, file_list = WorkingTree.open_containing_paths(file_list)
1605
1503
if file_list is not None:
1743
1641
last_revision = wt.last_revision()
1745
self.add_cleanup(b.repository.lock_read().unlock)
1746
graph = b.repository.get_graph()
1747
revisions = [revid for revid, parents in
1748
graph.iter_ancestry([last_revision])]
1749
for revision_id in reversed(revisions):
1750
if _mod_revision.is_null(revision_id):
1643
revision_ids = b.repository.get_ancestry(last_revision)
1645
for revision_id in revision_ids:
1752
1646
self.outf.write(revision_id + '\n')
1792
1686
Option('append-revisions-only',
1793
1687
help='Never change revnos or the existing log.'
1794
' Append revisions to it only.'),
1796
'Create a branch without a working tree.')
1688
' Append revisions to it only.')
1798
1690
def run(self, location=None, format=None, append_revisions_only=False,
1799
create_prefix=False, no_tree=False):
1691
create_prefix=False):
1800
1692
if format is None:
1801
1693
format = bzrdir.format_registry.make_bzrdir('default')
1802
1694
if location is None:
3134
2984
to trigger updates to external systems like bug trackers. The --fixes
3135
2985
option can be used to record the association between a revision and
3136
2986
one or more bugs. See ``bzr help bugs`` for details.
2988
A selective commit may fail in some cases where the committed
2989
tree would be invalid. Consider::
2994
bzr commit foo -m "committing foo"
2995
bzr mv foo/bar foo/baz
2998
bzr commit foo/bar -m "committing bar but not baz"
3000
In the example above, the last commit will fail by design. This gives
3001
the user the opportunity to decide whether they want to commit the
3002
rename at the same time, separately first, or not at all. (As a general
3003
rule, when in doubt, Bazaar has a policy of Doing the Safe Thing.)
3005
# TODO: Run hooks on tree to-be-committed, and after commit.
3007
# TODO: Strict commit that fails if there are deleted files.
3008
# (what does "deleted files" mean ??)
3010
# TODO: Give better message for -s, --summary, used by tla people
3012
# XXX: verbose currently does nothing
3139
3014
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3140
3015
takes_args = ['selected*']
3201
3072
def run(self, message=None, file=None, verbose=False, selected_list=None,
3202
3073
unchanged=False, strict=False, local=False, fixes=None,
3203
author=None, show_diff=False, exclude=None, commit_time=None,
3074
author=None, show_diff=False, exclude=None, commit_time=None):
3205
3075
from bzrlib.errors import (
3206
3076
PointlessCommit,
3207
3077
ConflictsInTree,
3283
3158
# make_commit_message_template_encoded returns user encoding.
3284
3159
# We probably want to be using edit_commit_message instead to
3286
my_message = set_commit_message(commit_obj)
3287
if my_message is None:
3288
start_message = generate_commit_message_template(commit_obj)
3289
my_message = edit_commit_message_encoded(text,
3290
start_message=start_message)
3161
start_message = generate_commit_message_template(commit_obj)
3162
my_message = edit_commit_message_encoded(text,
3163
start_message=start_message)
3291
3164
if my_message is None:
3292
3165
raise errors.BzrCommandError("please specify a commit"
3293
3166
" message with either --message or --file")
3306
3179
reporter=None, verbose=verbose, revprops=properties,
3307
3180
authors=author, timestamp=commit_stamp,
3308
3181
timezone=offset,
3309
exclude=tree.safe_relpath_files(exclude),
3182
exclude=tree.safe_relpath_files(exclude))
3311
3183
except PointlessCommit:
3312
3184
raise errors.BzrCommandError("No changes to commit."
3313
" Please 'bzr add' the files you want to commit, or use"
3314
" --unchanged to force an empty commit.")
3185
" Use --unchanged to commit anyhow.")
3315
3186
except ConflictsInTree:
3316
3187
raise errors.BzrCommandError('Conflicts detected in working '
3317
3188
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
3400
3271
class cmd_upgrade(Command):
3401
__doc__ = """Upgrade a repository, branch or working tree to a newer format.
3403
When the default format has changed after a major new release of
3404
Bazaar, you may be informed during certain operations that you
3405
should upgrade. Upgrading to a newer format may improve performance
3406
or make new features available. It may however limit interoperability
3407
with older repositories or with older versions of Bazaar.
3409
If you wish to upgrade to a particular format rather than the
3410
current default, that can be specified using the --format option.
3411
As a consequence, you can use the upgrade command this way to
3412
"downgrade" to an earlier format, though some conversions are
3413
a one way process (e.g. changing from the 1.x default to the
3414
2.x default) so downgrading is not always possible.
3416
A backup.bzr.~#~ directory is created at the start of the conversion
3417
process (where # is a number). By default, this is left there on
3418
completion. If the conversion fails, delete the new .bzr directory
3419
and rename this one back in its place. Use the --clean option to ask
3420
for the backup.bzr directory to be removed on successful conversion.
3421
Alternatively, you can delete it by hand if everything looks good
3424
If the location given is a shared repository, dependent branches
3425
are also converted provided the repository converts successfully.
3426
If the conversion of a branch fails, remaining branches are still
3429
For more information on upgrades, see the Bazaar Upgrade Guide,
3430
http://doc.bazaar.canonical.com/latest/en/upgrade-guide/.
3272
__doc__ = """Upgrade branch storage to current format.
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.
3433
_see_also = ['check', 'reconcile', 'formats']
3279
_see_also = ['check']
3434
3280
takes_args = ['url?']
3435
3281
takes_options = [
3436
RegistryOption('format',
3437
help='Upgrade to a specific format. See "bzr help'
3438
' formats" for details.',
3439
lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3440
converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3441
value_switches=True, title='Branch format'),
3443
help='Remove the backup.bzr directory if successful.'),
3445
help="Show what would be done, but don't actually do anything."),
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'),
3448
def run(self, url='.', format=None, clean=False, dry_run=False):
3290
def run(self, url='.', format=None):
3449
3291
from bzrlib.upgrade import upgrade
3450
exceptions = upgrade(url, format, clean_up=clean, dry_run=dry_run)
3452
if len(exceptions) == 1:
3453
# Compatibility with historical behavior
3292
upgrade(url, format)
3459
3295
class cmd_whoami(Command):
3668
3500
if typestring == "sftp":
3669
3501
from bzrlib.tests import stub_sftp
3670
3502
return stub_sftp.SFTPAbsoluteServer
3671
elif typestring == "memory":
3503
if typestring == "memory":
3672
3504
from bzrlib.tests import test_server
3673
3505
return memory.MemoryServer
3674
elif typestring == "fakenfs":
3506
if typestring == "fakenfs":
3675
3507
from bzrlib.tests import test_server
3676
3508
return test_server.FakeNFSServer
3677
3509
msg = "No known transport type %s. Supported types are: sftp\n" %\
3711
3543
Option('randomize', type=str, argname="SEED",
3712
3544
help='Randomize the order of tests using the given'
3713
3545
' seed or "now" for the current time.'),
3714
ListOption('exclude', type=str, argname="PATTERN",
3716
help='Exclude tests that match this regular'
3546
Option('exclude', type=str, argname="PATTERN",
3548
help='Exclude tests that match this regular'
3718
3550
Option('subunit',
3719
3551
help='Output test progress via subunit.'),
3720
3552
Option('strict', help='Fail on missing dependencies or '
3860
3688
The source of the merge can be specified either in the form of a branch,
3861
3689
or in the form of a path to a file containing a merge directive generated
3862
3690
with bzr send. If neither is specified, the default is the upstream branch
3863
or the branch most recently merged using --remember. The source of the
3864
merge may also be specified in the form of a path to a file in another
3865
branch: in this case, only the modifications to that file are merged into
3866
the current working tree.
3868
When merging from a branch, by default bzr will try to merge in all new
3869
work from the other branch, automatically determining an appropriate base
3870
revision. If this fails, you may need to give an explicit base.
3872
To pick a different ending revision, pass "--revision OTHER". bzr will
3873
try to merge in all new work up to and including revision OTHER.
3875
If you specify two values, "--revision BASE..OTHER", only revisions BASE
3876
through OTHER, excluding BASE but including OTHER, will be merged. If this
3877
causes some revisions to be skipped, i.e. if the destination branch does
3878
not already contain revision BASE, such a merge is commonly referred to as
3879
a "cherrypick". Unlike a normal merge, Bazaar does not currently track
3880
cherrypicks. The changes look like a normal commit, and the history of the
3881
changes from the other branch is not stored in the commit.
3883
Revision numbers are always relative to the source branch.
3691
or the branch most recently merged using --remember.
3693
When merging a branch, by default the tip will be merged. To pick a different
3694
revision, pass --revision. If you specify two values, the first will be used as
3695
BASE and the second one as OTHER. Merging individual revisions, or a subset of
3696
available revisions, like this is commonly referred to as "cherrypicking".
3698
Revision numbers are always relative to the branch being merged.
3700
By default, bzr will try to merge in all new work from the other
3701
branch, automatically determining an appropriate base. If this
3702
fails, you may need to give an explicit base.
3885
3704
Merge will do its best to combine the changes in two branches, but there
3886
3705
are some kinds of problems only a human can fix. When it encounters those,
3890
3709
Use bzr resolve when you have fixed a problem. See also bzr conflicts.
3892
If there is no default branch set, the first merge will set it (use
3893
--no-remember to avoid settting it). After that, you can omit the branch
3894
to use the default. To change the default, use --remember. The value will
3895
only be saved if the remote location can be accessed.
3711
If there is no default branch set, the first merge will set it. After
3712
that, you can omit the branch to use the default. To change the
3713
default, use --remember. The value will only be saved if the remote
3714
location can be accessed.
3897
3716
The results of the merge are placed into the destination working
3898
3717
directory, where they can be reviewed (with bzr diff), tested, and then
3899
3718
committed to record the result of the merge.
3901
3720
merge refuses to run if there are any uncommitted changes, unless
3902
--force is given. If --force is given, then the changes from the source
3903
will be merged with the current working tree, including any uncommitted
3904
changes in the tree. The --force option can also be used to create a
3721
--force is given. The --force option can also be used to create a
3905
3722
merge revision which has more than two parents.
3907
3724
If one would like to merge changes from the working tree of the other
3967
3784
def run(self, location=None, revision=None, force=False,
3968
merge_type=None, show_base=False, reprocess=None, remember=None,
3785
merge_type=None, show_base=False, reprocess=None, remember=False,
3969
3786
uncommitted=False, pull=False,
3970
3787
directory=None,
4035
3848
self.sanity_check_merger(merger)
4036
3849
if (merger.base_rev_id == merger.other_rev_id and
4037
3850
merger.other_rev_id is not None):
4038
# check if location is a nonexistent file (and not a branch) to
4039
# disambiguate the 'Nothing to do'
4040
if merger.interesting_files:
4041
if not merger.other_tree.has_filename(
4042
merger.interesting_files[0]):
4043
note("merger: " + str(merger))
4044
raise errors.PathsDoNotExist([location])
4045
3851
note('Nothing to do.')
4047
if pull and not preview:
4048
3854
if merger.interesting_files is not None:
4049
3855
raise errors.BzrCommandError('Cannot pull individual files')
4050
3856
if (merger.base_rev_id == tree.last_revision()):
4159
3965
if other_revision_id is None:
4160
3966
other_revision_id = _mod_revision.ensure_null(
4161
3967
other_branch.last_revision())
4162
# Remember where we merge from. We need to remember if:
4163
# - user specify a location (and we don't merge from the parent
4165
# - user ask to remember or there is no previous location set to merge
4166
# from and user didn't ask to *not* remember
4167
if (user_location is not None
4169
or (remember is None
4170
and tree.branch.get_submit_branch() is None)))):
3968
# Remember where we merge from
3969
if ((remember or tree.branch.get_submit_branch() is None) and
3970
user_location is not None):
4171
3971
tree.branch.set_submit_branch(other_branch.base)
4172
# Merge tags (but don't set them in the master branch yet, the user
4173
# might revert this merge). Commit will propagate them.
4174
_merge_tags_if_possible(other_branch, tree.branch, ignore_master=True)
3972
_merge_tags_if_possible(other_branch, tree.branch)
4175
3973
merger = _mod_merge.Merger.from_revision_ids(pb, tree,
4176
3974
other_revision_id, base_revision_id, other_branch, base_branch)
4177
3975
if other_path != '':
4345
4143
last committed revision is used.
4347
4145
To remove only some changes, without reverting to a prior version, use
4348
merge instead. For example, "merge . -r -2..-3" (don't forget the ".")
4349
will remove the changes introduced by the second last commit (-2), without
4350
affecting the changes introduced by the last commit (-1). To remove
4351
certain changes on a hunk-by-hunk basis, see the shelve command.
4146
merge instead. For example, "merge . --revision -2..-3" will remove the
4147
changes introduced by -2, without affecting the changes introduced by -1.
4148
Or to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
4353
4150
By default, any files that have been manually changed will be backed up
4354
4151
first. (Files changed only by merge are not backed up.) Backup files have
4684
4481
@display_command
4685
4482
def run(self, verbose=False):
4686
from bzrlib import plugin
4687
# Don't give writelines a generator as some codecs don't like that
4688
self.outf.writelines(
4689
list(plugin.describe_plugins(show_paths=verbose)))
4483
import bzrlib.plugin
4484
from inspect import getdoc
4486
for name, plugin in bzrlib.plugin.plugins().items():
4487
version = plugin.__version__
4488
if version == 'unknown':
4490
name_ver = '%s %s' % (name, version)
4491
d = getdoc(plugin.module)
4493
doc = d.split('\n')[0]
4495
doc = '(no description)'
4496
result.append((name_ver, doc, plugin.path()))
4497
for name_ver, doc, path in sorted(result):
4498
self.outf.write("%s\n" % name_ver)
4499
self.outf.write(" %s\n" % doc)
4501
self.outf.write(" %s\n" % path)
4502
self.outf.write("\n")
4692
4505
class cmd_testament(Command):
4756
4567
self.add_cleanup(branch.lock_read().unlock)
4757
4568
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4758
4569
self.add_cleanup(tree.lock_read().unlock)
4759
if wt is not None and revision is None:
4760
4571
file_id = wt.path2id(relpath)
4762
4573
file_id = tree.path2id(relpath)
4763
4574
if file_id is None:
4764
4575
raise errors.NotVersionedError(filename)
4576
file_version = tree.inventory[file_id].revision
4765
4577
if wt is not None and revision is None:
4766
4578
# If there is a tree and we're not annotating historical
4767
4579
# versions, annotate the working tree's content.
4768
4580
annotate_file_tree(wt, file_id, self.outf, long, all,
4769
4581
show_ids=show_ids)
4771
annotate_file_tree(tree, file_id, self.outf, long, all,
4772
show_ids=show_ids, branch=branch)
4583
annotate_file(branch, file_version, file_id, long, all, self.outf,
4775
4587
class cmd_re_sign(Command):
5026
4838
takes_options = [
5027
4839
Option('config',
5028
4840
help='LOCATION is the directory where the config lock is.'),
5030
help='Do not ask for confirmation before breaking the lock.'),
5033
def run(self, location=None, config=False, force=False):
4843
def run(self, location=None, config=False):
5034
4844
if location is None:
5035
4845
location = u'.'
5037
ui.ui_factory = ui.ConfirmationUserInterfacePolicy(ui.ui_factory,
5039
{'bzrlib.lockdir.break': True})
5041
4847
conf = _mod_config.LockableConfig(file_name=location)
5042
4848
conf.break_lock()
5332
5138
source branch defaults to that containing the working directory, but can
5333
5139
be changed using --from.
5335
Both the submit branch and the public branch follow the usual behavior with
5336
respect to --remember: If there is no default location set, the first send
5337
will set it (use --no-remember to avoid settting it). After that, you can
5338
omit the location to use the default. To change the default, use
5339
--remember. The value will only be saved if the location can be accessed.
5341
5141
In order to calculate those changes, bzr must analyse the submit branch.
5342
5142
Therefore it is most efficient for the submit branch to be a local mirror.
5343
5143
If a public location is known for the submit_branch, that location is used
5414
5214
def run(self, submit_branch=None, public_branch=None, no_bundle=False,
5415
no_patch=False, revision=None, remember=None, output=None,
5215
no_patch=False, revision=None, remember=False, output=None,
5416
5216
format=None, mail_to=None, message=None, body=None,
5417
5217
strict=None, **kwargs):
5418
5218
from bzrlib.send import send
5575
5375
takes_options = [
5576
5376
custom_help('directory',
5577
5377
help='Branch whose tags should be displayed.'),
5578
RegistryOption('sort',
5378
RegistryOption.from_kwargs('sort',
5579
5379
'Sort tags by different criteria.', title='Sorting',
5580
lazy_registry=('bzrlib.tag', 'tag_sort_methods')
5380
alpha='Sort tags lexicographically (default).',
5381
time='Sort tags chronologically.',
5586
5387
@display_command
5587
def run(self, directory='.', sort=None, show_ids=False, revision=None):
5588
from bzrlib.tag import tag_sort_methods
5589
5394
branch, relpath = Branch.open_containing(directory)
5591
5396
tags = branch.tags.get_tag_dict().items()
5600
5405
# only show revisions between revid1 and revid2 (inclusive)
5601
5406
tags = [(tag, revid) for tag, revid in tags if
5602
5407
graph.is_between(revid, revid1, revid2)]
5604
sort = tag_sort_methods.get()
5410
elif sort == 'time':
5412
for tag, revid in tags:
5414
revobj = branch.repository.get_revision(revid)
5415
except errors.NoSuchRevision:
5416
timestamp = sys.maxint # place them at the end
5418
timestamp = revobj.timestamp
5419
timestamps[revid] = timestamp
5420
tags.sort(key=lambda x: timestamps[x[1]])
5606
5421
if not show_ids:
5607
5422
# [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5608
5423
for index, (tag, revid) in enumerate(tags):
6032
5847
You can put multiple items on the shelf, and by default, 'unshelve' will
6033
5848
restore the most recently shelved changes.
6035
For complicated changes, it is possible to edit the changes in a separate
6036
editor program to decide what the file remaining in the working copy
6037
should look like. To do this, add the configuration option
6039
change_editor = PROGRAM @new_path @old_path
6041
where @new_path is replaced with the path of the new version of the
6042
file and @old_path is replaced with the path of the old version of
6043
the file. The PROGRAM should save the new file with the desired
6044
contents of the file in the working tree.
6048
5851
takes_args = ['file*']
6060
5863
Option('destroy',
6061
5864
help='Destroy removed changes instead of shelving them.'),
6063
_see_also = ['unshelve', 'configuration']
5866
_see_also = ['unshelve']
6065
5868
def run(self, revision=None, all=False, file_list=None, message=None,
6066
writer=None, list=False, destroy=False, directory=None):
5869
writer=None, list=False, destroy=False, directory=u'.'):
6068
return self.run_for_list(directory=directory)
5871
return self.run_for_list()
6069
5872
from bzrlib.shelf_ui import Shelver
6070
5873
if writer is None:
6071
5874
writer = bzrlib.option.diff_writer_registry.get()
6148
5949
takes_options = ['directory',
6149
5950
Option('ignored', help='Delete all ignored files.'),
6150
Option('detritus', help='Delete conflict files, merge and revert'
5951
Option('detritus', help='Delete conflict files, merge'
6151
5952
' backups, and failed selftest dirs.'),
6152
5953
Option('unknown',
6153
5954
help='Delete files unknown to bzr (default).'),
6212
6013
self.outf.write('%s %s\n' % (path, location))
6215
class cmd_export_pot(Command):
6216
__doc__ = """Export command helps and error messages in po format."""
6221
from bzrlib.export_pot import export_pot
6222
export_pot(self.outf)
6225
6016
def _register_lazy_builtins():
6226
6017
# register lazy builtins from other modules; called at startup and should
6227
6018
# be only called once.
6228
6019
for (name, aliases, module_name) in [
6229
6020
('cmd_bundle_info', [], 'bzrlib.bundle.commands'),
6230
('cmd_config', [], 'bzrlib.config'),
6231
6021
('cmd_dpush', [], 'bzrlib.foreign'),
6232
6022
('cmd_version_info', [], 'bzrlib.cmd_version_info'),
6233
6023
('cmd_resolve', ['resolved'], 'bzrlib.conflicts'),
6234
6024
('cmd_conflicts', [], 'bzrlib.conflicts'),
6235
('cmd_sign_my_commits', [], 'bzrlib.commit_signature_commands'),
6236
('cmd_verify_signatures', [],
6237
'bzrlib.commit_signature_commands'),
6238
('cmd_test_script', [], 'bzrlib.cmd_test_script'),
6025
('cmd_sign_my_commits', [], 'bzrlib.sign_my_commits'),
6240
6027
builtin_command_registry.register_lazy(name, aliases, module_name)