485
483
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
486
class cmd_revno(Command):
542
487
__doc__ = """Show current revision number.
1242
1181
files_from=None):
1243
1182
from bzrlib import switch as _mod_switch
1244
1183
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
1184
accelerator_tree, br_from = bzrdir.BzrDir.open_tree_or_branch(
1253
1186
if not (hardlink or files_from):
3114
3022
to trigger updates to external systems like bug trackers. The --fixes
3115
3023
option can be used to record the association between a revision and
3116
3024
one or more bugs. See ``bzr help bugs`` for details.
3026
A selective commit may fail in some cases where the committed
3027
tree would be invalid. Consider::
3032
bzr commit foo -m "committing foo"
3033
bzr mv foo/bar foo/baz
3036
bzr commit foo/bar -m "committing bar but not baz"
3038
In the example above, the last commit will fail by design. This gives
3039
the user the opportunity to decide whether they want to commit the
3040
rename at the same time, separately first, or not at all. (As a general
3041
rule, when in doubt, Bazaar has a policy of Doing the Safe Thing.)
3043
# TODO: Run hooks on tree to-be-committed, and after commit.
3045
# TODO: Strict commit that fails if there are deleted files.
3046
# (what does "deleted files" mean ??)
3048
# TODO: Give better message for -s, --summary, used by tla people
3050
# XXX: verbose currently does nothing
3119
3052
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3120
3053
takes_args = ['selected*']
3181
3110
def run(self, message=None, file=None, verbose=False, selected_list=None,
3182
3111
unchanged=False, strict=False, local=False, fixes=None,
3183
author=None, show_diff=False, exclude=None, commit_time=None,
3112
author=None, show_diff=False, exclude=None, commit_time=None):
3185
3113
from bzrlib.errors import (
3186
3114
PointlessCommit,
3187
3115
ConflictsInTree,
3283
3217
reporter=None, verbose=verbose, revprops=properties,
3284
3218
authors=author, timestamp=commit_stamp,
3285
3219
timezone=offset,
3286
exclude=tree.safe_relpath_files(exclude),
3220
exclude=tree.safe_relpath_files(exclude))
3288
3221
except PointlessCommit:
3289
3222
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.")
3223
" Use --unchanged to commit anyhow.")
3292
3224
except ConflictsInTree:
3293
3225
raise errors.BzrCommandError('Conflicts detected in working '
3294
3226
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
3377
3309
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/.
3310
__doc__ = """Upgrade branch storage to current format.
3312
The check command or bzr developers may sometimes advise you to run
3313
this command. When the default format has changed you may also be warned
3314
during other operations to upgrade.
3410
_see_also = ['check', 'reconcile', 'formats']
3317
_see_also = ['check']
3411
3318
takes_args = ['url?']
3412
3319
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."),
3320
RegistryOption('format',
3321
help='Upgrade to a specific format. See "bzr help'
3322
' formats" for details.',
3323
lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3324
converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3325
value_switches=True, title='Branch format'),
3425
def run(self, url='.', format=None, clean=False, dry_run=False):
3328
def run(self, url='.', format=None):
3426
3329
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
3330
upgrade(url, format)
3436
3333
class cmd_whoami(Command):
3835
3728
with bzr send. If neither is specified, the default is the upstream branch
3836
3729
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.
3731
When merging a branch, by default the tip will be merged. To pick a different
3732
revision, pass --revision. If you specify two values, the first will be used as
3733
BASE and the second one as OTHER. Merging individual revisions, or a subset of
3734
available revisions, like this is commonly referred to as "cherrypicking".
3736
Revision numbers are always relative to the branch being merged.
3738
By default, bzr will try to merge in all new work from the other
3739
branch, automatically determining an appropriate base. If this
3740
fails, you may need to give an explicit base.
3853
3742
Merge will do its best to combine the changes in two branches, but there
3854
3743
are some kinds of problems only a human can fix. When it encounters those,
4118
4007
if ((remember or tree.branch.get_submit_branch() is None) and
4119
4008
user_location is not None):
4120
4009
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)
4010
_merge_tags_if_possible(other_branch, tree.branch)
4124
4011
merger = _mod_merge.Merger.from_revision_ids(pb, tree,
4125
4012
other_revision_id, base_revision_id, other_branch, base_branch)
4126
4013
if other_path != '':
4294
4181
last committed revision is used.
4296
4183
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.
4184
merge instead. For example, "merge . --revision -2..-3" will remove the
4185
changes introduced by -2, without affecting the changes introduced by -1.
4186
Or to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
4302
4188
By default, any files that have been manually changed will be backed up
4303
4189
first. (Files changed only by merge are not backed up.) Backup files have
4633
4519
@display_command
4634
4520
def run(self, verbose=False):
4635
from bzrlib import plugin
4636
self.outf.writelines(
4637
plugin.describe_plugins(show_paths=verbose))
4521
import bzrlib.plugin
4522
from inspect import getdoc
4524
for name, plugin in bzrlib.plugin.plugins().items():
4525
version = plugin.__version__
4526
if version == 'unknown':
4528
name_ver = '%s %s' % (name, version)
4529
d = getdoc(plugin.module)
4531
doc = d.split('\n')[0]
4533
doc = '(no description)'
4534
result.append((name_ver, doc, plugin.path()))
4535
for name_ver, doc, path in sorted(result):
4536
self.outf.write("%s\n" % name_ver)
4537
self.outf.write(" %s\n" % doc)
4539
self.outf.write(" %s\n" % path)
4540
self.outf.write("\n")
4640
4543
class cmd_testament(Command):
4704
4605
self.add_cleanup(branch.lock_read().unlock)
4705
4606
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4706
4607
self.add_cleanup(tree.lock_read().unlock)
4707
if wt is not None and revision is None:
4708
4609
file_id = wt.path2id(relpath)
4710
4611
file_id = tree.path2id(relpath)
4711
4612
if file_id is None:
4712
4613
raise errors.NotVersionedError(filename)
4614
file_version = tree.inventory[file_id].revision
4713
4615
if wt is not None and revision is None:
4714
4616
# If there is a tree and we're not annotating historical
4715
4617
# versions, annotate the working tree's content.
4716
4618
annotate_file_tree(wt, file_id, self.outf, long, all,
4717
4619
show_ids=show_ids)
4719
annotate_file_tree(tree, file_id, self.outf, long, all,
4720
show_ids=show_ids, branch=branch)
4621
annotate_file(branch, file_version, file_id, long, all, self.outf,
4723
4625
class cmd_re_sign(Command):
5517
5419
takes_options = [
5518
5420
custom_help('directory',
5519
5421
help='Branch whose tags should be displayed.'),
5520
RegistryOption('sort',
5422
RegistryOption.from_kwargs('sort',
5521
5423
'Sort tags by different criteria.', title='Sorting',
5522
lazy_registry=('bzrlib.tag', 'tag_sort_methods')
5424
natural='Sort numeric substrings as numbers:'
5425
' suitable for version numbers. (default)',
5426
alpha='Sort tags lexicographically.',
5427
time='Sort tags chronologically.',
5528
5433
@display_command
5529
def run(self, directory='.', sort=None, show_ids=False, revision=None):
5530
from bzrlib.tag import tag_sort_methods
5531
5440
branch, relpath = Branch.open_containing(directory)
5533
5442
tags = branch.tags.get_tag_dict().items()
5542
5451
# only show revisions between revid1 and revid2 (inclusive)
5543
5452
tags = [(tag, revid) for tag, revid in tags if
5544
5453
graph.is_between(revid, revid1, revid2)]
5546
sort = tag_sort_methods.get()
5454
if sort == 'natural':
5455
def natural_sort_key(tag):
5456
return [f(s) for f,s in
5457
zip(itertools.cycle((unicode.lower,int)),
5458
re.split('([0-9]+)', tag[0]))]
5459
tags.sort(key=natural_sort_key)
5460
elif sort == 'alpha':
5462
elif sort == 'time':
5464
for tag, revid in tags:
5466
revobj = branch.repository.get_revision(revid)
5467
except errors.NoSuchRevision:
5468
timestamp = sys.maxint # place them at the end
5470
timestamp = revobj.timestamp
5471
timestamps[revid] = timestamp
5472
tags.sort(key=lambda x: timestamps[x[1]])
5548
5473
if not show_ids:
5549
5474
# [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5550
5475
for index, (tag, revid) in enumerate(tags):
5974
5899
You can put multiple items on the shelf, and by default, 'unshelve' will
5975
5900
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.
5990
5903
takes_args = ['file*']
6002
5915
Option('destroy',
6003
5916
help='Destroy removed changes instead of shelving them.'),
6005
_see_also = ['unshelve', 'configuration']
5918
_see_also = ['unshelve']
6007
5920
def run(self, revision=None, all=False, file_list=None, message=None,
6008
writer=None, list=False, destroy=False, directory=None):
5921
writer=None, list=False, destroy=False, directory=u'.'):
6010
return self.run_for_list(directory=directory)
5923
return self.run_for_list()
6011
5924
from bzrlib.shelf_ui import Shelver
6012
5925
if writer is None:
6013
5926
writer = bzrlib.option.diff_writer_registry.get()
6090
6001
takes_options = ['directory',
6091
6002
Option('ignored', help='Delete all ignored files.'),
6092
Option('detritus', help='Delete conflict files, merge and revert'
6003
Option('detritus', help='Delete conflict files, merge'
6093
6004
' backups, and failed selftest dirs.'),
6094
6005
Option('unknown',
6095
6006
help='Delete files unknown to bzr (default).'),
6175
6076
('cmd_resolve', ['resolved'], 'bzrlib.conflicts'),
6176
6077
('cmd_conflicts', [], 'bzrlib.conflicts'),
6177
6078
('cmd_sign_my_commits', [], 'bzrlib.sign_my_commits'),
6178
('cmd_test_script', [], 'bzrlib.cmd_test_script'),
6079
('cmd_test_script', [], 'bzrlib.tests.script'),
6180
6081
builtin_command_registry.register_lazy(name, aliases, module_name)