250
250
To skip the display of pending merge information altogether, use
251
251
the no-pending option or specify a file/directory.
253
If a revision argument is given, the status is calculated against
254
that revision, or between two revisions if two are provided.
253
To compare the working directory to a specific revision, pass a
254
single revision to the revision argument.
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'.
257
261
# TODO: --no-recurse, --recurse options
477
485
d.destroy_workingtree()
488
class cmd_repair_workingtree(Command):
489
__doc__ = """Reset the working tree state file.
491
This is not meant to be used normally, but more as a way to recover from
492
filesystem corruption, etc. This rebuilds the working inventory back to a
493
'known good' state. Any new modifications (adding a file, renaming, etc)
494
will be lost, though modified files will still be detected as such.
496
Most users will want something more like "bzr revert" or "bzr update"
497
unless the state file has become corrupted.
499
By default this attempts to recover the current state by looking at the
500
headers of the state file. If the state file is too corrupted to even do
501
that, you can supply --revision to force the state of the tree.
504
takes_options = ['revision', 'directory',
506
help='Reset the tree even if it doesn\'t appear to be'
511
def run(self, revision=None, directory='.', force=False):
512
tree, _ = WorkingTree.open_containing(directory)
513
self.add_cleanup(tree.lock_tree_write().unlock)
517
except errors.BzrError:
518
pass # There seems to be a real error here, so we'll reset
521
raise errors.BzrCommandError(
522
'The tree does not appear to be corrupt. You probably'
523
' want "bzr revert" instead. Use "--force" if you are'
524
' sure you want to reset the working tree.')
528
revision_ids = [r.as_revision_id(tree.branch) for r in revision]
530
tree.reset_state(revision_ids)
531
except errors.BzrError, e:
532
if revision_ids is None:
533
extra = (', the header appears corrupt, try passing -r -1'
534
' to set the state to the last commit')
537
raise errors.BzrCommandError('failed to reset the tree state'
480
541
class cmd_revno(Command):
481
542
__doc__ = """Show current revision number.
923
984
"branch. Local pulls are not applied to "
924
985
"the master branch."
988
help="Show base revision text in conflicts.")
927
990
takes_args = ['location?']
928
991
encoding_type = 'replace'
930
993
def run(self, location=None, remember=False, overwrite=False,
931
994
revision=None, verbose=False,
932
directory=None, local=False):
995
directory=None, local=False,
933
997
# FIXME: too much stuff is in the command class
934
998
revision_id = None
1063
1138
def run(self, location=None, remember=False, overwrite=False,
1064
1139
create_prefix=False, verbose=False, revision=None,
1065
1140
use_existing_dir=False, directory=None, stacked_on=None,
1066
stacked=False, strict=None):
1141
stacked=False, strict=None, no_tree=False):
1067
1142
from bzrlib.push import _show_push_branch
1069
1144
if directory is None:
1115
1190
_show_push_branch(br_from, revision_id, location, self.outf,
1116
1191
verbose=verbose, overwrite=overwrite, remember=remember,
1117
1192
stacked_on=stacked_on, create_prefix=create_prefix,
1118
use_existing_dir=use_existing_dir)
1193
use_existing_dir=use_existing_dir, no_tree=no_tree)
1121
1196
class cmd_branch(Command):
1165
1242
files_from=None):
1166
1243
from bzrlib import switch as _mod_switch
1167
1244
from bzrlib.tag import _merge_tags_if_possible
1245
if self.invoked_as in ['get', 'clone']:
1246
ui.ui_factory.show_user_warning(
1247
'deprecated_command',
1248
deprecated_name=self.invoked_as,
1249
recommended_name='branch',
1250
deprecated_in_version='2.4')
1168
1251
accelerator_tree, br_from = bzrdir.BzrDir.open_tree_or_branch(
1170
1253
if not (hardlink or files_from):
1354
1437
If you want to discard your local changes, you can just do a
1355
1438
'bzr revert' instead of 'bzr commit' after the update.
1440
If you want to restore a file that has been removed locally, use
1441
'bzr revert' instead of 'bzr update'.
1357
1443
If the tree's branch is bound to a master branch, it will also update
1358
1444
the branch from the master.
1361
1447
_see_also = ['pull', 'working-trees', 'status-flags']
1362
1448
takes_args = ['dir?']
1363
takes_options = ['revision']
1449
takes_options = ['revision',
1451
help="Show base revision text in conflicts."),
1364
1453
aliases = ['up']
1366
def run(self, dir='.', revision=None):
1455
def run(self, dir='.', revision=None, show_base=None):
1367
1456
if revision is not None and len(revision) != 1:
1368
1457
raise errors.BzrCommandError(
1369
1458
"bzr update --revision takes exactly one revision")
1491
1581
title='Deletion Strategy', value_switches=True, enum_switch=False,
1492
1582
safe='Backup changed files (default).',
1493
1583
keep='Delete from bzr but leave the working copy.',
1584
no_backup='Don\'t backup changed files.',
1494
1585
force='Delete all the specified files, even if they can not be '
1495
'recovered and even if they are non-empty directories.')]
1586
'recovered and even if they are non-empty directories. '
1587
'(deprecated, use no-backup)')]
1496
1588
aliases = ['rm', 'del']
1497
1589
encoding_type = 'replace'
1499
1591
def run(self, file_list, verbose=False, new=False,
1500
1592
file_deletion_strategy='safe'):
1593
if file_deletion_strategy == 'force':
1594
note("(The --force option is deprecated, rather use --no-backup "
1596
file_deletion_strategy = 'no-backup'
1501
1598
tree, file_list = WorkingTree.open_containing_paths(file_list)
1503
1600
if file_list is not None:
1686
1783
Option('append-revisions-only',
1687
1784
help='Never change revnos or the existing log.'
1688
' Append revisions to it only.')
1785
' Append revisions to it only.'),
1787
'Create a branch without a working tree.')
1690
1789
def run(self, location=None, format=None, append_revisions_only=False,
1691
create_prefix=False):
1790
create_prefix=False, no_tree=False):
1692
1791
if format is None:
1693
1792
format = bzrdir.format_registry.make_bzrdir('default')
1694
1793
if location is None:
2984
3114
to trigger updates to external systems like bug trackers. The --fixes
2985
3115
option can be used to record the association between a revision and
2986
3116
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
3014
3119
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3015
3120
takes_args = ['selected*']
3072
3181
def run(self, message=None, file=None, verbose=False, selected_list=None,
3073
3182
unchanged=False, strict=False, local=False, fixes=None,
3074
author=None, show_diff=False, exclude=None, commit_time=None):
3183
author=None, show_diff=False, exclude=None, commit_time=None,
3075
3185
from bzrlib.errors import (
3076
3186
PointlessCommit,
3077
3187
ConflictsInTree,
3179
3283
reporter=None, verbose=verbose, revprops=properties,
3180
3284
authors=author, timestamp=commit_stamp,
3181
3285
timezone=offset,
3182
exclude=tree.safe_relpath_files(exclude))
3286
exclude=tree.safe_relpath_files(exclude),
3183
3288
except PointlessCommit:
3184
3289
raise errors.BzrCommandError("No changes to commit."
3185
" Use --unchanged to commit anyhow.")
3290
" Please 'bzr add' the files you want to commit, or use"
3291
" --unchanged to force an empty commit.")
3186
3292
except ConflictsInTree:
3187
3293
raise errors.BzrCommandError('Conflicts detected in working '
3188
3294
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
3271
3377
class cmd_upgrade(Command):
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.
3378
__doc__ = """Upgrade a repository, branch or working tree to a newer format.
3380
When the default format has changed after a major new release of
3381
Bazaar, you may be informed during certain operations that you
3382
should upgrade. Upgrading to a newer format may improve performance
3383
or make new features available. It may however limit interoperability
3384
with older repositories or with older versions of Bazaar.
3386
If you wish to upgrade to a particular format rather than the
3387
current default, that can be specified using the --format option.
3388
As a consequence, you can use the upgrade command this way to
3389
"downgrade" to an earlier format, though some conversions are
3390
a one way process (e.g. changing from the 1.x default to the
3391
2.x default) so downgrading is not always possible.
3393
A backup.bzr.~#~ directory is created at the start of the conversion
3394
process (where # is a number). By default, this is left there on
3395
completion. If the conversion fails, delete the new .bzr directory
3396
and rename this one back in its place. Use the --clean option to ask
3397
for the backup.bzr directory to be removed on successful conversion.
3398
Alternatively, you can delete it by hand if everything looks good
3401
If the location given is a shared repository, dependent branches
3402
are also converted provided the repository converts successfully.
3403
If the conversion of a branch fails, remaining branches are still
3406
For more information on upgrades, see the Bazaar Upgrade Guide,
3407
http://doc.bazaar.canonical.com/latest/en/upgrade-guide/.
3279
_see_also = ['check']
3410
_see_also = ['check', 'reconcile', 'formats']
3280
3411
takes_args = ['url?']
3281
3412
takes_options = [
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'),
3413
RegistryOption('format',
3414
help='Upgrade to a specific format. See "bzr help'
3415
' formats" for details.',
3416
lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3417
converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3418
value_switches=True, title='Branch format'),
3420
help='Remove the backup.bzr directory if successful.'),
3422
help="Show what would be done, but don't actually do anything."),
3290
def run(self, url='.', format=None):
3425
def run(self, url='.', format=None, clean=False, dry_run=False):
3291
3426
from bzrlib.upgrade import upgrade
3292
upgrade(url, format)
3427
exceptions = upgrade(url, format, clean_up=clean, dry_run=dry_run)
3429
if len(exceptions) == 1:
3430
# Compatibility with historical behavior
3295
3436
class cmd_whoami(Command):
3687
3835
with bzr send. If neither is specified, the default is the upstream branch
3688
3836
or the branch most recently merged using --remember.
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".
3695
Revision numbers are always relative to the branch being merged.
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.
3838
When merging from a branch, by default bzr will try to merge in all new
3839
work from the other branch, automatically determining an appropriate base
3840
revision. If this fails, you may need to give an explicit base.
3842
To pick a different ending revision, pass "--revision OTHER". bzr will
3843
try to merge in all new work up to and including revision OTHER.
3845
If you specify two values, "--revision BASE..OTHER", only revisions BASE
3846
through OTHER, excluding BASE but including OTHER, will be merged. If this
3847
causes some revisions to be skipped, i.e. if the destination branch does
3848
not already contain revision BASE, such a merge is commonly referred to as
3851
Revision numbers are always relative to the source branch.
3701
3853
Merge will do its best to combine the changes in two branches, but there
3702
3854
are some kinds of problems only a human can fix. When it encounters those,
3966
4118
if ((remember or tree.branch.get_submit_branch() is None) and
3967
4119
user_location is not None):
3968
4120
tree.branch.set_submit_branch(other_branch.base)
3969
_merge_tags_if_possible(other_branch, tree.branch)
4121
# Merge tags (but don't set them in the master branch yet, the user
4122
# might revert this merge). Commit will propagate them.
4123
_merge_tags_if_possible(other_branch, tree.branch, ignore_master=True)
3970
4124
merger = _mod_merge.Merger.from_revision_ids(pb, tree,
3971
4125
other_revision_id, base_revision_id, other_branch, base_branch)
3972
4126
if other_path != '':
4140
4294
last committed revision is used.
4142
4296
To remove only some changes, without reverting to a prior version, use
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.
4297
merge instead. For example, "merge . -r -2..-3" (don't forget the ".")
4298
will remove the changes introduced by the second last commit (-2), without
4299
affecting the changes introduced by the last commit (-1). To remove
4300
certain changes on a hunk-by-hunk basis, see the shelve command.
4147
4302
By default, any files that have been manually changed will be backed up
4148
4303
first. (Files changed only by merge are not backed up.) Backup files have
4478
4633
@display_command
4479
4634
def run(self, verbose=False):
4480
import bzrlib.plugin
4481
from inspect import getdoc
4483
for name, plugin in bzrlib.plugin.plugins().items():
4484
version = plugin.__version__
4485
if version == 'unknown':
4487
name_ver = '%s %s' % (name, version)
4488
d = getdoc(plugin.module)
4490
doc = d.split('\n')[0]
4492
doc = '(no description)'
4493
result.append((name_ver, doc, plugin.path()))
4494
for name_ver, doc, path in sorted(result):
4495
self.outf.write("%s\n" % name_ver)
4496
self.outf.write(" %s\n" % doc)
4498
self.outf.write(" %s\n" % path)
4499
self.outf.write("\n")
4635
from bzrlib import plugin
4636
self.outf.writelines(
4637
plugin.describe_plugins(show_paths=verbose))
4502
4640
class cmd_testament(Command):
4564
4704
self.add_cleanup(branch.lock_read().unlock)
4565
4705
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4566
4706
self.add_cleanup(tree.lock_read().unlock)
4707
if wt is not None and revision is None:
4568
4708
file_id = wt.path2id(relpath)
4570
4710
file_id = tree.path2id(relpath)
4571
4711
if file_id is None:
4572
4712
raise errors.NotVersionedError(filename)
4573
file_version = tree.inventory[file_id].revision
4574
4713
if wt is not None and revision is None:
4575
4714
# If there is a tree and we're not annotating historical
4576
4715
# versions, annotate the working tree's content.
4577
4716
annotate_file_tree(wt, file_id, self.outf, long, all,
4578
4717
show_ids=show_ids)
4580
annotate_file(branch, file_version, file_id, long, all, self.outf,
4719
annotate_file_tree(tree, file_id, self.outf, long, all,
4720
show_ids=show_ids, branch=branch)
4584
4723
class cmd_re_sign(Command):
4832
4974
takes_options = [
4833
4975
Option('config',
4834
4976
help='LOCATION is the directory where the config lock is.'),
4978
help='Do not ask for confirmation before breaking the lock.'),
4837
def run(self, location=None, config=False):
4981
def run(self, location=None, config=False, force=False):
4838
4982
if location is None:
4839
4983
location = u'.'
4985
ui.ui_factory = ui.ConfirmationUserInterfacePolicy(ui.ui_factory,
4987
{'bzrlib.lockdir.break': True})
4841
4989
conf = _mod_config.LockableConfig(file_name=location)
4842
4990
conf.break_lock()
5369
5517
takes_options = [
5370
5518
custom_help('directory',
5371
5519
help='Branch whose tags should be displayed.'),
5372
RegistryOption.from_kwargs('sort',
5520
RegistryOption('sort',
5373
5521
'Sort tags by different criteria.', title='Sorting',
5374
alpha='Sort tags lexicographically (default).',
5375
time='Sort tags chronologically.',
5522
lazy_registry=('bzrlib.tag', 'tag_sort_methods')
5381
5528
@display_command
5529
def run(self, directory='.', sort=None, show_ids=False, revision=None):
5530
from bzrlib.tag import tag_sort_methods
5388
5531
branch, relpath = Branch.open_containing(directory)
5390
5533
tags = branch.tags.get_tag_dict().items()
5399
5542
# only show revisions between revid1 and revid2 (inclusive)
5400
5543
tags = [(tag, revid) for tag, revid in tags if
5401
5544
graph.is_between(revid, revid1, revid2)]
5404
elif sort == 'time':
5406
for tag, revid in tags:
5408
revobj = branch.repository.get_revision(revid)
5409
except errors.NoSuchRevision:
5410
timestamp = sys.maxint # place them at the end
5412
timestamp = revobj.timestamp
5413
timestamps[revid] = timestamp
5414
tags.sort(key=lambda x: timestamps[x[1]])
5546
sort = tag_sort_methods.get()
5415
5548
if not show_ids:
5416
5549
# [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5417
5550
for index, (tag, revid) in enumerate(tags):
5841
5974
You can put multiple items on the shelf, and by default, 'unshelve' will
5842
5975
restore the most recently shelved changes.
5977
For complicated changes, it is possible to edit the changes in a separate
5978
editor program to decide what the file remaining in the working copy
5979
should look like. To do this, add the configuration option
5981
change_editor = PROGRAM @new_path @old_path
5983
where @new_path is replaced with the path of the new version of the
5984
file and @old_path is replaced with the path of the old version of
5985
the file. The PROGRAM should save the new file with the desired
5986
contents of the file in the working tree.
5845
5990
takes_args = ['file*']
5857
6002
Option('destroy',
5858
6003
help='Destroy removed changes instead of shelving them.'),
5860
_see_also = ['unshelve']
6005
_see_also = ['unshelve', 'configuration']
5862
6007
def run(self, revision=None, all=False, file_list=None, message=None,
5863
writer=None, list=False, destroy=False, directory=u'.'):
6008
writer=None, list=False, destroy=False, directory=None):
5865
return self.run_for_list()
6010
return self.run_for_list(directory=directory)
5866
6011
from bzrlib.shelf_ui import Shelver
5867
6012
if writer is None:
5868
6013
writer = bzrlib.option.diff_writer_registry.get()
5943
6090
takes_options = ['directory',
5944
6091
Option('ignored', help='Delete all ignored files.'),
5945
Option('detritus', help='Delete conflict files, merge'
6092
Option('detritus', help='Delete conflict files, merge and revert'
5946
6093
' backups, and failed selftest dirs.'),
5947
6094
Option('unknown',
5948
6095
help='Delete files unknown to bzr (default).'),
6012
6159
# be only called once.
6013
6160
for (name, aliases, module_name) in [
6014
6161
('cmd_bundle_info', [], 'bzrlib.bundle.commands'),
6162
('cmd_config', [], 'bzrlib.config'),
6015
6163
('cmd_dpush', [], 'bzrlib.foreign'),
6016
6164
('cmd_version_info', [], 'bzrlib.cmd_version_info'),
6017
6165
('cmd_resolve', ['resolved'], 'bzrlib.conflicts'),
6018
6166
('cmd_conflicts', [], 'bzrlib.conflicts'),
6019
6167
('cmd_sign_my_commits', [], 'bzrlib.sign_my_commits'),
6168
('cmd_test_script', [], 'bzrlib.cmd_test_script'),
6021
6170
builtin_command_registry.register_lazy(name, aliases, module_name)