250
250
To skip the display of pending merge information altogether, use
251
251
the no-pending option or specify a file/directory.
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'.
253
If a revision argument is given, the status is calculated against
254
that revision, or between two revisions if two are provided.
261
257
# TODO: --no-recurse, --recurse options
485
477
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'
541
480
class cmd_revno(Command):
542
481
__doc__ = """Show current revision number.
984
923
"branch. Local pulls are not applied to "
985
924
"the master branch."
988
help="Show base revision text in conflicts.")
990
927
takes_args = ['location?']
991
928
encoding_type = 'replace'
993
930
def run(self, location=None, remember=False, overwrite=False,
994
931
revision=None, verbose=False,
995
directory=None, local=False,
932
directory=None, local=False):
997
933
# FIXME: too much stuff is in the command class
998
934
revision_id = None
1138
1063
def run(self, location=None, remember=False, overwrite=False,
1139
1064
create_prefix=False, verbose=False, revision=None,
1140
1065
use_existing_dir=False, directory=None, stacked_on=None,
1141
stacked=False, strict=None, no_tree=False):
1066
stacked=False, strict=None):
1142
1067
from bzrlib.push import _show_push_branch
1144
1069
if directory is None:
1190
1115
_show_push_branch(br_from, revision_id, location, self.outf,
1191
1116
verbose=verbose, overwrite=overwrite, remember=remember,
1192
1117
stacked_on=stacked_on, create_prefix=create_prefix,
1193
use_existing_dir=use_existing_dir, no_tree=no_tree)
1118
use_existing_dir=use_existing_dir)
1196
1121
class cmd_branch(Command):
1242
1165
files_from=None):
1243
1166
from bzrlib import switch as _mod_switch
1244
1167
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')
1251
1168
accelerator_tree, br_from = bzrdir.BzrDir.open_tree_or_branch(
1253
1170
if not (hardlink or files_from):
1437
1354
If you want to discard your local changes, you can just do a
1438
1355
'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'.
1443
1357
If the tree's branch is bound to a master branch, it will also update
1444
1358
the branch from the master.
1447
1361
_see_also = ['pull', 'working-trees', 'status-flags']
1448
1362
takes_args = ['dir?']
1449
takes_options = ['revision',
1451
help="Show base revision text in conflicts."),
1363
takes_options = ['revision']
1453
1364
aliases = ['up']
1455
def run(self, dir='.', revision=None, show_base=None):
1366
def run(self, dir='.', revision=None):
1456
1367
if revision is not None and len(revision) != 1:
1457
1368
raise errors.BzrCommandError(
1458
1369
"bzr update --revision takes exactly one revision")
1581
1491
title='Deletion Strategy', value_switches=True, enum_switch=False,
1582
1492
safe='Backup changed files (default).',
1583
1493
keep='Delete from bzr but leave the working copy.',
1584
no_backup='Don\'t backup changed files.',
1585
1494
force='Delete all the specified files, even if they can not be '
1586
'recovered and even if they are non-empty directories. '
1587
'(deprecated, use no-backup)')]
1495
'recovered and even if they are non-empty directories.')]
1588
1496
aliases = ['rm', 'del']
1589
1497
encoding_type = 'replace'
1591
1499
def run(self, file_list, verbose=False, new=False,
1592
1500
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'
1598
1501
tree, file_list = WorkingTree.open_containing_paths(file_list)
1600
1503
if file_list is not None:
1783
1686
Option('append-revisions-only',
1784
1687
help='Never change revnos or the existing log.'
1785
' Append revisions to it only.'),
1787
'Create a branch without a working tree.')
1688
' Append revisions to it only.')
1789
1690
def run(self, location=None, format=None, append_revisions_only=False,
1790
create_prefix=False, no_tree=False):
1691
create_prefix=False):
1791
1692
if format is None:
1792
1693
format = bzrdir.format_registry.make_bzrdir('default')
1793
1694
if location is None:
3114
2984
to trigger updates to external systems like bug trackers. The --fixes
3115
2985
option can be used to record the association between a revision and
3116
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
3119
3014
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3120
3015
takes_args = ['selected*']
3181
3072
def run(self, message=None, file=None, verbose=False, selected_list=None,
3182
3073
unchanged=False, strict=False, local=False, fixes=None,
3183
author=None, show_diff=False, exclude=None, commit_time=None,
3074
author=None, show_diff=False, exclude=None, commit_time=None):
3185
3075
from bzrlib.errors import (
3186
3076
PointlessCommit,
3187
3077
ConflictsInTree,
3283
3179
reporter=None, verbose=verbose, revprops=properties,
3284
3180
authors=author, timestamp=commit_stamp,
3285
3181
timezone=offset,
3286
exclude=tree.safe_relpath_files(exclude),
3182
exclude=tree.safe_relpath_files(exclude))
3288
3183
except PointlessCommit:
3289
3184
raise errors.BzrCommandError("No changes to commit."
3290
" Please 'bzr add' the files you want to commit, or use"
3291
" --unchanged to force an empty commit.")
3185
" Use --unchanged to commit anyhow.")
3292
3186
except ConflictsInTree:
3293
3187
raise errors.BzrCommandError('Conflicts detected in working '
3294
3188
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
3377
3271
class cmd_upgrade(Command):
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/.
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.
3410
_see_also = ['check', 'reconcile', 'formats']
3279
_see_also = ['check']
3411
3280
takes_args = ['url?']
3412
3281
takes_options = [
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."),
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'),
3425
def run(self, url='.', format=None, clean=False, dry_run=False):
3290
def run(self, url='.', format=None):
3426
3291
from bzrlib.upgrade import upgrade
3427
exceptions = upgrade(url, format, clean_up=clean, dry_run=dry_run)
3429
if len(exceptions) == 1:
3430
# Compatibility with historical behavior
3292
upgrade(url, format)
3436
3295
class cmd_whoami(Command):
3563
3418
'bzr alias --remove expects an alias to remove.')
3564
3419
# If alias is not found, print something like:
3565
3420
# unalias: foo: not found
3566
c = _mod_config.GlobalConfig()
3421
c = config.GlobalConfig()
3567
3422
c.unset_alias(alias_name)
3569
3424
@display_command
3570
3425
def print_aliases(self):
3571
3426
"""Print out the defined aliases in a similar format to bash."""
3572
aliases = _mod_config.GlobalConfig().get_aliases()
3427
aliases = config.GlobalConfig().get_aliases()
3573
3428
for key, value in sorted(aliases.iteritems()):
3574
3429
self.outf.write('bzr alias %s="%s"\n' % (key, value))
3718
3570
randomize=None, exclude=None, strict=False,
3719
3571
load_list=None, debugflag=None, starting_with=None, subunit=False,
3720
3572
parallel=None, lsprof_tests=False):
3721
from bzrlib import tests
3573
from bzrlib.tests import selftest
3575
# Make deprecation warnings visible, unless -Werror is set
3576
symbol_versioning.activate_deprecation_warnings(override=False)
3723
3578
if testspecs_list is not None:
3724
3579
pattern = '|'.join(testspecs_list)
3835
3683
with bzr send. If neither is specified, the default is the upstream branch
3836
3684
or the branch most recently merged using --remember.
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.
3686
When merging a branch, by default the tip will be merged. To pick a different
3687
revision, pass --revision. If you specify two values, the first will be used as
3688
BASE and the second one as OTHER. Merging individual revisions, or a subset of
3689
available revisions, like this is commonly referred to as "cherrypicking".
3691
Revision numbers are always relative to the branch being merged.
3693
By default, bzr will try to merge in all new work from the other
3694
branch, automatically determining an appropriate base. If this
3695
fails, you may need to give an explicit base.
3853
3697
Merge will do its best to combine the changes in two branches, but there
3854
3698
are some kinds of problems only a human can fix. When it encounters those,
4118
3962
if ((remember or tree.branch.get_submit_branch() is None) and
4119
3963
user_location is not None):
4120
3964
tree.branch.set_submit_branch(other_branch.base)
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)
3965
_merge_tags_if_possible(other_branch, tree.branch)
4124
3966
merger = _mod_merge.Merger.from_revision_ids(pb, tree,
4125
3967
other_revision_id, base_revision_id, other_branch, base_branch)
4126
3968
if other_path != '':
4294
4136
last committed revision is used.
4296
4138
To remove only some changes, without reverting to a prior version, use
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.
4139
merge instead. For example, "merge . --revision -2..-3" will remove the
4140
changes introduced by -2, without affecting the changes introduced by -1.
4141
Or to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
4302
4143
By default, any files that have been manually changed will be backed up
4303
4144
first. (Files changed only by merge are not backed up.) Backup files have
4633
4474
@display_command
4634
4475
def run(self, verbose=False):
4635
from bzrlib import plugin
4636
self.outf.writelines(
4637
plugin.describe_plugins(show_paths=verbose))
4476
import bzrlib.plugin
4477
from inspect import getdoc
4479
for name, plugin in bzrlib.plugin.plugins().items():
4480
version = plugin.__version__
4481
if version == 'unknown':
4483
name_ver = '%s %s' % (name, version)
4484
d = getdoc(plugin.module)
4486
doc = d.split('\n')[0]
4488
doc = '(no description)'
4489
result.append((name_ver, doc, plugin.path()))
4490
for name_ver, doc, path in sorted(result):
4491
self.outf.write("%s\n" % name_ver)
4492
self.outf.write(" %s\n" % doc)
4494
self.outf.write(" %s\n" % path)
4495
self.outf.write("\n")
4640
4498
class cmd_testament(Command):
4702
4560
self.add_cleanup(branch.lock_read().unlock)
4703
4561
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4704
4562
self.add_cleanup(tree.lock_read().unlock)
4705
if wt is not None and revision is None:
4706
4564
file_id = wt.path2id(relpath)
4708
4566
file_id = tree.path2id(relpath)
4709
4567
if file_id is None:
4710
4568
raise errors.NotVersionedError(filename)
4569
file_version = tree.inventory[file_id].revision
4711
4570
if wt is not None and revision is None:
4712
4571
# If there is a tree and we're not annotating historical
4713
4572
# versions, annotate the working tree's content.
4714
4573
annotate_file_tree(wt, file_id, self.outf, long, all,
4715
4574
show_ids=show_ids)
4717
file_version = tree.get_file_revision(file_id)
4718
4576
annotate_file(branch, file_version, file_id, long, all, self.outf,
4719
4577
show_ids=show_ids)
4968
4820
bzr break-lock bzr+ssh://example.com/bzr/foo
4969
bzr break-lock --conf ~/.bazaar
4972
4822
takes_args = ['location?']
4975
help='LOCATION is the directory where the config lock is.'),
4977
help='Do not ask for confirmation before breaking the lock.'),
4980
def run(self, location=None, config=False, force=False):
4824
def run(self, location=None, show=False):
4981
4825
if location is None:
4982
4826
location = u'.'
4984
ui.ui_factory = ui.ConfirmationUserInterfacePolicy(ui.ui_factory,
4986
{'bzrlib.lockdir.break': True})
4988
conf = _mod_config.LockableConfig(file_name=location)
4991
control, relpath = bzrdir.BzrDir.open_containing(location)
4993
control.break_lock()
4994
except NotImplementedError:
4827
control, relpath = bzrdir.BzrDir.open_containing(location)
4829
control.break_lock()
4830
except NotImplementedError:
4998
4834
class cmd_wait_until_signalled(Command):
5516
5352
takes_options = [
5517
5353
custom_help('directory',
5518
5354
help='Branch whose tags should be displayed.'),
5519
RegistryOption('sort',
5355
RegistryOption.from_kwargs('sort',
5520
5356
'Sort tags by different criteria.', title='Sorting',
5521
lazy_registry=('bzrlib.tag', 'tag_sort_methods')
5357
alpha='Sort tags lexicographically (default).',
5358
time='Sort tags chronologically.',
5527
5364
@display_command
5528
def run(self, directory='.', sort=None, show_ids=False, revision=None):
5529
from bzrlib.tag import tag_sort_methods
5530
5371
branch, relpath = Branch.open_containing(directory)
5532
5373
tags = branch.tags.get_tag_dict().items()
5541
5382
# only show revisions between revid1 and revid2 (inclusive)
5542
5383
tags = [(tag, revid) for tag, revid in tags if
5543
5384
graph.is_between(revid, revid1, revid2)]
5545
sort = tag_sort_methods.get()
5387
elif sort == 'time':
5389
for tag, revid in tags:
5391
revobj = branch.repository.get_revision(revid)
5392
except errors.NoSuchRevision:
5393
timestamp = sys.maxint # place them at the end
5395
timestamp = revobj.timestamp
5396
timestamps[revid] = timestamp
5397
tags.sort(key=lambda x: timestamps[x[1]])
5547
5398
if not show_ids:
5548
5399
# [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5549
5400
for index, (tag, revid) in enumerate(tags):
5973
5824
You can put multiple items on the shelf, and by default, 'unshelve' will
5974
5825
restore the most recently shelved changes.
5976
For complicated changes, it is possible to edit the changes in a separate
5977
editor program to decide what the file remaining in the working copy
5978
should look like. To do this, add the configuration option
5980
change_editor = PROGRAM @new_path @old_path
5982
where @new_path is replaced with the path of the new version of the
5983
file and @old_path is replaced with the path of the old version of
5984
the file. The PROGRAM should save the new file with the desired
5985
contents of the file in the working tree.
5989
5828
takes_args = ['file*']
6001
5840
Option('destroy',
6002
5841
help='Destroy removed changes instead of shelving them.'),
6004
_see_also = ['unshelve', 'configuration']
5843
_see_also = ['unshelve']
6006
5845
def run(self, revision=None, all=False, file_list=None, message=None,
6007
writer=None, list=False, destroy=False, directory=None):
5846
writer=None, list=False, destroy=False, directory=u'.'):
6009
return self.run_for_list(directory=directory)
5848
return self.run_for_list()
6010
5849
from bzrlib.shelf_ui import Shelver
6011
5850
if writer is None:
6012
5851
writer = bzrlib.option.diff_writer_registry.get()
6089
5926
takes_options = ['directory',
6090
5927
Option('ignored', help='Delete all ignored files.'),
6091
Option('detritus', help='Delete conflict files, merge and revert'
5928
Option('detritus', help='Delete conflict files, merge'
6092
5929
' backups, and failed selftest dirs.'),
6093
5930
Option('unknown',
6094
5931
help='Delete files unknown to bzr (default).'),
6158
5995
# be only called once.
6159
5996
for (name, aliases, module_name) in [
6160
5997
('cmd_bundle_info', [], 'bzrlib.bundle.commands'),
6161
('cmd_config', [], 'bzrlib.config'),
6162
5998
('cmd_dpush', [], 'bzrlib.foreign'),
6163
5999
('cmd_version_info', [], 'bzrlib.cmd_version_info'),
6164
6000
('cmd_resolve', ['resolved'], 'bzrlib.conflicts'),
6165
6001
('cmd_conflicts', [], 'bzrlib.conflicts'),
6166
6002
('cmd_sign_my_commits', [], 'bzrlib.sign_my_commits'),
6167
('cmd_test_script', [], 'bzrlib.cmd_test_script'),
6169
6004
builtin_command_registry.register_lazy(name, aliases, module_name)