483
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'
486
541
class cmd_revno(Command):
487
542
__doc__ = """Show current revision number.
3043
3106
to trigger updates to external systems like bug trackers. The --fixes
3044
3107
option can be used to record the association between a revision and
3045
3108
one or more bugs. See ``bzr help bugs`` for details.
3047
A selective commit may fail in some cases where the committed
3048
tree would be invalid. Consider::
3053
bzr commit foo -m "committing foo"
3054
bzr mv foo/bar foo/baz
3057
bzr commit foo/bar -m "committing bar but not baz"
3059
In the example above, the last commit will fail by design. This gives
3060
the user the opportunity to decide whether they want to commit the
3061
rename at the same time, separately first, or not at all. (As a general
3062
rule, when in doubt, Bazaar has a policy of Doing the Safe Thing.)
3064
# TODO: Run hooks on tree to-be-committed, and after commit.
3066
# TODO: Strict commit that fails if there are deleted files.
3067
# (what does "deleted files" mean ??)
3069
# TODO: Give better message for -s, --summary, used by tla people
3071
# XXX: verbose currently does nothing
3073
3111
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3074
3112
takes_args = ['selected*']
3131
3173
def run(self, message=None, file=None, verbose=False, selected_list=None,
3132
3174
unchanged=False, strict=False, local=False, fixes=None,
3133
author=None, show_diff=False, exclude=None, commit_time=None):
3175
author=None, show_diff=False, exclude=None, commit_time=None,
3134
3177
from bzrlib.errors import (
3135
3178
PointlessCommit,
3136
3179
ConflictsInTree,
3238
3275
reporter=None, verbose=verbose, revprops=properties,
3239
3276
authors=author, timestamp=commit_stamp,
3240
3277
timezone=offset,
3241
exclude=tree.safe_relpath_files(exclude))
3278
exclude=tree.safe_relpath_files(exclude),
3242
3280
except PointlessCommit:
3243
3281
raise errors.BzrCommandError("No changes to commit."
3244
" Use --unchanged to commit anyhow.")
3282
" Please 'bzr add' the files you want to commit, or use"
3283
" --unchanged to force an empty commit.")
3245
3284
except ConflictsInTree:
3246
3285
raise errors.BzrCommandError('Conflicts detected in working '
3247
3286
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
3330
3369
class cmd_upgrade(Command):
3331
__doc__ = """Upgrade branch storage to current format.
3333
The check command or bzr developers may sometimes advise you to run
3334
this command. When the default format has changed you may also be warned
3335
during other operations to upgrade.
3370
__doc__ = """Upgrade a repository, branch or working tree to a newer format.
3372
When the default format has changed after a major new release of
3373
Bazaar, you may be informed during certain operations that you
3374
should upgrade. Upgrading to a newer format may improve performance
3375
or make new features available. It may however limit interoperability
3376
with older repositories or with older versions of Bazaar.
3378
If you wish to upgrade to a particular format rather than the
3379
current default, that can be specified using the --format option.
3380
As a consequence, you can use the upgrade command this way to
3381
"downgrade" to an earlier format, though some conversions are
3382
a one way process (e.g. changing from the 1.x default to the
3383
2.x default) so downgrading is not always possible.
3385
A backup.bzr.~#~ directory is created at the start of the conversion
3386
process (where # is a number). By default, this is left there on
3387
completion. If the conversion fails, delete the new .bzr directory
3388
and rename this one back in its place. Use the --clean option to ask
3389
for the backup.bzr directory to be removed on successful conversion.
3390
Alternatively, you can delete it by hand if everything looks good
3393
If the location given is a shared repository, dependent branches
3394
are also converted provided the repository converts successfully.
3395
If the conversion of a branch fails, remaining branches are still
3398
For more information on upgrades, see the Bazaar Upgrade Guide,
3399
http://doc.bazaar.canonical.com/latest/en/upgrade-guide/.
3338
_see_also = ['check']
3402
_see_also = ['check', 'reconcile', 'formats']
3339
3403
takes_args = ['url?']
3340
3404
takes_options = [
3341
RegistryOption('format',
3342
help='Upgrade to a specific format. See "bzr help'
3343
' formats" for details.',
3344
lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3345
converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3346
value_switches=True, title='Branch format'),
3405
RegistryOption('format',
3406
help='Upgrade to a specific format. See "bzr help'
3407
' formats" for details.',
3408
lazy_registry=('bzrlib.bzrdir', 'format_registry'),
3409
converter=lambda name: bzrdir.format_registry.make_bzrdir(name),
3410
value_switches=True, title='Branch format'),
3412
help='Remove the backup.bzr directory if successful.'),
3414
help="Show what would be done, but don't actually do anything."),
3349
def run(self, url='.', format=None):
3417
def run(self, url='.', format=None, clean=False, dry_run=False):
3350
3418
from bzrlib.upgrade import upgrade
3351
upgrade(url, format)
3419
exceptions = upgrade(url, format, clean_up=clean, dry_run=dry_run)
3421
if len(exceptions) == 1:
3422
# Compatibility with historical behavior
3354
3428
class cmd_whoami(Command):
3749
3827
with bzr send. If neither is specified, the default is the upstream branch
3750
3828
or the branch most recently merged using --remember.
3752
When merging a branch, by default the tip will be merged. To pick a different
3753
revision, pass --revision. If you specify two values, the first will be used as
3754
BASE and the second one as OTHER. Merging individual revisions, or a subset of
3755
available revisions, like this is commonly referred to as "cherrypicking".
3757
Revision numbers are always relative to the branch being merged.
3759
By default, bzr will try to merge in all new work from the other
3760
branch, automatically determining an appropriate base. If this
3761
fails, you may need to give an explicit base.
3830
When merging from a branch, by default bzr will try to merge in all new
3831
work from the other branch, automatically determining an appropriate base
3832
revision. If this fails, you may need to give an explicit base.
3834
To pick a different ending revision, pass "--revision OTHER". bzr will
3835
try to merge in all new work up to and including revision OTHER.
3837
If you specify two values, "--revision BASE..OTHER", only revisions BASE
3838
through OTHER, excluding BASE but including OTHER, will be merged. If this
3839
causes some revisions to be skipped, i.e. if the destination branch does
3840
not already contain revision BASE, such a merge is commonly referred to as
3843
Revision numbers are always relative to the source branch.
3763
3845
Merge will do its best to combine the changes in two branches, but there
3764
3846
are some kinds of problems only a human can fix. When it encounters those,
4028
4110
if ((remember or tree.branch.get_submit_branch() is None) and
4029
4111
user_location is not None):
4030
4112
tree.branch.set_submit_branch(other_branch.base)
4031
_merge_tags_if_possible(other_branch, tree.branch)
4113
# Merge tags (but don't set them in the master branch yet, the user
4114
# might revert this merge). Commit will propagate them.
4115
_merge_tags_if_possible(other_branch, tree.branch, ignore_master=True)
4032
4116
merger = _mod_merge.Merger.from_revision_ids(pb, tree,
4033
4117
other_revision_id, base_revision_id, other_branch, base_branch)
4034
4118
if other_path != '':
4202
4286
last committed revision is used.
4204
4288
To remove only some changes, without reverting to a prior version, use
4205
merge instead. For example, "merge . --revision -2..-3" will remove the
4206
changes introduced by -2, without affecting the changes introduced by -1.
4207
Or to remove certain changes on a hunk-by-hunk basis, see the Shelf plugin.
4289
merge instead. For example, "merge . -r -2..-3" (don't forget the ".")
4290
will remove the changes introduced by the second last commit (-2), without
4291
affecting the changes introduced by the last commit (-1). To remove
4292
certain changes on a hunk-by-hunk basis, see the shelve command.
4209
4294
By default, any files that have been manually changed will be backed up
4210
4295
first. (Files changed only by merge are not backed up.) Backup files have
4540
4625
@display_command
4541
4626
def run(self, verbose=False):
4542
import bzrlib.plugin
4543
from inspect import getdoc
4545
for name, plugin in bzrlib.plugin.plugins().items():
4546
version = plugin.__version__
4547
if version == 'unknown':
4549
name_ver = '%s %s' % (name, version)
4550
d = getdoc(plugin.module)
4552
doc = d.split('\n')[0]
4554
doc = '(no description)'
4555
result.append((name_ver, doc, plugin.path()))
4556
for name_ver, doc, path in sorted(result):
4557
self.outf.write("%s\n" % name_ver)
4558
self.outf.write(" %s\n" % doc)
4560
self.outf.write(" %s\n" % path)
4561
self.outf.write("\n")
4627
from bzrlib import plugin
4628
self.outf.writelines(
4629
plugin.describe_plugins(show_paths=verbose))
4564
4632
class cmd_testament(Command):
4626
4694
self.add_cleanup(branch.lock_read().unlock)
4627
4695
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4628
4696
self.add_cleanup(tree.lock_read().unlock)
4697
if wt is not None and revision is None:
4630
4698
file_id = wt.path2id(relpath)
4632
4700
file_id = tree.path2id(relpath)
4633
4701
if file_id is None:
4634
4702
raise errors.NotVersionedError(filename)
4635
file_version = tree.inventory[file_id].revision
4636
4703
if wt is not None and revision is None:
4637
4704
# If there is a tree and we're not annotating historical
4638
4705
# versions, annotate the working tree's content.
4639
4706
annotate_file_tree(wt, file_id, self.outf, long, all,
4640
4707
show_ids=show_ids)
4709
file_version = tree.inventory[file_id].revision
4642
4710
annotate_file(branch, file_version, file_id, long, all, self.outf,
4643
4711
show_ids=show_ids)
5440
5508
takes_options = [
5441
5509
custom_help('directory',
5442
5510
help='Branch whose tags should be displayed.'),
5443
RegistryOption.from_kwargs('sort',
5511
RegistryOption('sort',
5444
5512
'Sort tags by different criteria.', title='Sorting',
5445
natural='Sort numeric substrings as numbers:'
5446
' suitable for version numbers. (default)',
5447
alpha='Sort tags lexicographically.',
5448
time='Sort tags chronologically.',
5513
lazy_registry=('bzrlib.tag', 'tag_sort_methods')
5454
5519
@display_command
5520
def run(self, directory='.', sort=None, show_ids=False, revision=None):
5521
from bzrlib.tag import tag_sort_methods
5461
5522
branch, relpath = Branch.open_containing(directory)
5463
5524
tags = branch.tags.get_tag_dict().items()
5472
5533
# only show revisions between revid1 and revid2 (inclusive)
5473
5534
tags = [(tag, revid) for tag, revid in tags if
5474
5535
graph.is_between(revid, revid1, revid2)]
5475
if sort == 'natural':
5476
def natural_sort_key(tag):
5477
return [f(s) for f,s in
5478
zip(itertools.cycle((unicode.lower,int)),
5479
re.split('([0-9]+)', tag[0]))]
5480
tags.sort(key=natural_sort_key)
5481
elif sort == 'alpha':
5483
elif sort == 'time':
5485
for tag, revid in tags:
5487
revobj = branch.repository.get_revision(revid)
5488
except errors.NoSuchRevision:
5489
timestamp = sys.maxint # place them at the end
5491
timestamp = revobj.timestamp
5492
timestamps[revid] = timestamp
5493
tags.sort(key=lambda x: timestamps[x[1]])
5537
sort = tag_sort_methods.get()
5494
5539
if not show_ids:
5495
5540
# [ (tag, revid), ... ] -> [ (tag, dotted_revno), ... ]
5496
5541
for index, (tag, revid) in enumerate(tags):
5951
5996
_see_also = ['unshelve', 'configuration']
5953
5998
def run(self, revision=None, all=False, file_list=None, message=None,
5954
writer=None, list=False, destroy=False, directory=u'.'):
5999
writer=None, list=False, destroy=False, directory=None):
5956
return self.run_for_list()
6001
return self.run_for_list(directory=directory)
5957
6002
from bzrlib.shelf_ui import Shelver
5958
6003
if writer is None:
5959
6004
writer = bzrlib.option.diff_writer_registry.get()
6034
6081
takes_options = ['directory',
6035
6082
Option('ignored', help='Delete all ignored files.'),
6036
Option('detritus', help='Delete conflict files, merge'
6083
Option('detritus', help='Delete conflict files, merge and revert'
6037
6084
' backups, and failed selftest dirs.'),
6038
6085
Option('unknown',
6039
6086
help='Delete files unknown to bzr (default).'),