328
328
if revision_id is None and revision is None:
329
329
raise errors.BzrCommandError('You must supply either'
330
330
' --revision or a revision_id')
332
b = bzrdir.BzrDir.open_containing_tree_or_branch(directory)[1]
331
b = WorkingTree.open_containing(directory)[0].branch
334
333
revisions = b.repository.revisions
335
334
if revisions is None:
413
412
self.outf.write(page_bytes[:header_end])
414
413
page_bytes = data
415
414
self.outf.write('\nPage %d\n' % (page_idx,))
416
if len(page_bytes) == 0:
417
self.outf.write('(empty)\n');
419
decomp_bytes = zlib.decompress(page_bytes)
420
self.outf.write(decomp_bytes)
421
self.outf.write('\n')
415
decomp_bytes = zlib.decompress(page_bytes)
416
self.outf.write(decomp_bytes)
417
self.outf.write('\n')
423
419
def _dump_entries(self, trans, basename):
485
481
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
484
class cmd_revno(Command):
542
485
__doc__ = """Show current revision number.
1242
1179
files_from=None):
1243
1180
from bzrlib import switch as _mod_switch
1244
1181
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
1182
accelerator_tree, br_from = bzrdir.BzrDir.open_tree_or_branch(
1253
1184
if not (hardlink or files_from):
2032
1963
RegistryOption('format',
2034
1964
help='Diff format to use.',
2035
1965
lazy_registry=('bzrlib.diff', 'format_registry'),
2036
title='Diff format'),
1966
value_switches=False, title='Diff format'),
2038
1968
aliases = ['di', 'dif']
2039
1969
encoding_type = 'exact'
2796
2726
bzr ignore "RE:(?!debian/).*"
2798
2728
Ignore everything except the "local" toplevel directory,
2799
but always ignore autosave files ending in ~, even under local/::
2729
but always ignore "*~" autosave files, even under local/::
2802
2732
bzr ignore "!./local"
3114
3043
to trigger updates to external systems like bug trackers. The --fixes
3115
3044
option can be used to record the association between a revision and
3116
3045
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
3119
3073
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3120
3074
takes_args = ['selected*']
3152
3106
Option('show-diff', short_name='p',
3153
3107
help='When no message is supplied, show the diff along'
3154
3108
' with the status summary in the message editor.'),
3156
help='When committing to a foreign version control '
3157
'system do not push data that can not be natively '
3160
3110
aliases = ['ci', 'checkin']
3181
3131
def run(self, message=None, file=None, verbose=False, selected_list=None,
3182
3132
unchanged=False, strict=False, local=False, fixes=None,
3183
author=None, show_diff=False, exclude=None, commit_time=None,
3133
author=None, show_diff=False, exclude=None, commit_time=None):
3185
3134
from bzrlib.errors import (
3186
3135
PointlessCommit,
3187
3136
ConflictsInTree,
3201
3150
raise errors.BzrCommandError(
3202
3151
"Could not parse --commit-time: " + str(e))
3153
# TODO: Need a blackbox test for invoking the external editor; may be
3154
# slightly problematic to run this cross-platform.
3156
# TODO: do more checks that the commit will succeed before
3157
# spending the user's valuable time typing a commit message.
3204
3159
properties = {}
3206
3161
tree, selected_list = WorkingTree.open_containing_paths(selected_list)
3283
3238
reporter=None, verbose=verbose, revprops=properties,
3284
3239
authors=author, timestamp=commit_stamp,
3285
3240
timezone=offset,
3286
exclude=tree.safe_relpath_files(exclude),
3241
exclude=tree.safe_relpath_files(exclude))
3288
3242
except PointlessCommit:
3289
3243
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.")
3244
" Use --unchanged to commit anyhow.")
3292
3245
except ConflictsInTree:
3293
3246
raise errors.BzrCommandError('Conflicts detected in working '
3294
3247
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
4633
4586
@display_command
4634
4587
def run(self, verbose=False):
4635
from bzrlib import plugin
4636
self.outf.writelines(
4637
plugin.describe_plugins(show_paths=verbose))
4588
import bzrlib.plugin
4589
from inspect import getdoc
4591
for name, plugin in bzrlib.plugin.plugins().items():
4592
version = plugin.__version__
4593
if version == 'unknown':
4595
name_ver = '%s %s' % (name, version)
4596
d = getdoc(plugin.module)
4598
doc = d.split('\n')[0]
4600
doc = '(no description)'
4601
result.append((name_ver, doc, plugin.path()))
4602
for name_ver, doc, path in sorted(result):
4603
self.outf.write("%s\n" % name_ver)
4604
self.outf.write(" %s\n" % doc)
4606
self.outf.write(" %s\n" % path)
4607
self.outf.write("\n")
4640
4610
class cmd_testament(Command):
4693
4663
@display_command
4694
4664
def run(self, filename, all=False, long=False, revision=None,
4695
4665
show_ids=False, directory=None):
4696
from bzrlib.annotate import (
4666
from bzrlib.annotate import annotate_file, annotate_file_tree
4699
4667
wt, branch, relpath = \
4700
4668
_open_directory_or_containing_tree_or_branch(filename, directory)
4701
4669
if wt is not None:
4704
4672
self.add_cleanup(branch.lock_read().unlock)
4705
4673
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4706
4674
self.add_cleanup(tree.lock_read().unlock)
4707
if wt is not None and revision is None:
4708
4676
file_id = wt.path2id(relpath)
4710
4678
file_id = tree.path2id(relpath)
4711
4679
if file_id is None:
4712
4680
raise errors.NotVersionedError(filename)
4681
file_version = tree.inventory[file_id].revision
4713
4682
if wt is not None and revision is None:
4714
4683
# If there is a tree and we're not annotating historical
4715
4684
# versions, annotate the working tree's content.
4716
4685
annotate_file_tree(wt, file_id, self.outf, long, all,
4717
4686
show_ids=show_ids)
4719
annotate_file_tree(tree, file_id, self.outf, long, all,
4720
show_ids=show_ids, branch=branch)
4688
annotate_file(branch, file_version, file_id, long, all, self.outf,
4723
4692
class cmd_re_sign(Command):
5552
5521
revno = branch.revision_id_to_dotted_revno(revid)
5553
5522
if isinstance(revno, tuple):
5554
5523
revno = '.'.join(map(str, revno))
5555
except (errors.NoSuchRevision, errors.GhostRevisionsHaveNoRevno):
5524
except errors.NoSuchRevision:
5556
5525
# Bad tag data/merges can lead to tagged revisions
5557
5526
# which are not in this branch. Fail gracefully ...
6090
6059
takes_options = ['directory',
6091
6060
Option('ignored', help='Delete all ignored files.'),
6092
Option('detritus', help='Delete conflict files, merge and revert'
6061
Option('detritus', help='Delete conflict files, merge'
6093
6062
' backups, and failed selftest dirs.'),
6094
6063
Option('unknown',
6095
6064
help='Delete files unknown to bzr (default).'),
6154
6123
self.outf.write('%s %s\n' % (path, location))
6157
class cmd_export_pot(Command):
6158
__doc__ = """Export command helps and error messages in po format."""
6163
from bzrlib.export_pot import export_pot
6164
export_pot(self.outf)
6167
6126
def _register_lazy_builtins():
6168
6127
# register lazy builtins from other modules; called at startup and should
6169
6128
# be only called once.