1
# Copyright (C) 2005-2011 Canonical Ltd
1
# Copyright (C) 2005-2010 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
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'
2120
2050
@display_command
2121
2051
def run(self, null=False, directory=u'.'):
2122
2052
tree = WorkingTree.open_containing(directory)[0]
2123
self.add_cleanup(tree.lock_read().unlock)
2124
2053
td = tree.changes_from(tree.basis_tree())
2126
2054
for path, id, kind, text_modified, meta_modified in td.modified:
2128
2056
self.outf.write(path + '\0')
2796
2724
bzr ignore "RE:(?!debian/).*"
2798
2726
Ignore everything except the "local" toplevel directory,
2799
but always ignore autosave files ending in ~, even under local/::
2727
but always ignore "*~" autosave files, even under local/::
2802
2730
bzr ignore "!./local"
3114
3041
to trigger updates to external systems like bug trackers. The --fixes
3115
3042
option can be used to record the association between a revision and
3116
3043
one or more bugs. See ``bzr help bugs`` for details.
3045
A selective commit may fail in some cases where the committed
3046
tree would be invalid. Consider::
3051
bzr commit foo -m "committing foo"
3052
bzr mv foo/bar foo/baz
3055
bzr commit foo/bar -m "committing bar but not baz"
3057
In the example above, the last commit will fail by design. This gives
3058
the user the opportunity to decide whether they want to commit the
3059
rename at the same time, separately first, or not at all. (As a general
3060
rule, when in doubt, Bazaar has a policy of Doing the Safe Thing.)
3062
# TODO: Run hooks on tree to-be-committed, and after commit.
3064
# TODO: Strict commit that fails if there are deleted files.
3065
# (what does "deleted files" mean ??)
3067
# TODO: Give better message for -s, --summary, used by tla people
3069
# XXX: verbose currently does nothing
3119
3071
_see_also = ['add', 'bugs', 'hooks', 'uncommit']
3120
3072
takes_args = ['selected*']
3152
3104
Option('show-diff', short_name='p',
3153
3105
help='When no message is supplied, show the diff along'
3154
3106
' 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
3108
aliases = ['ci', 'checkin']
3181
3129
def run(self, message=None, file=None, verbose=False, selected_list=None,
3182
3130
unchanged=False, strict=False, local=False, fixes=None,
3183
author=None, show_diff=False, exclude=None, commit_time=None,
3131
author=None, show_diff=False, exclude=None, commit_time=None):
3185
3132
from bzrlib.errors import (
3186
3133
PointlessCommit,
3187
3134
ConflictsInTree,
3201
3148
raise errors.BzrCommandError(
3202
3149
"Could not parse --commit-time: " + str(e))
3151
# TODO: Need a blackbox test for invoking the external editor; may be
3152
# slightly problematic to run this cross-platform.
3154
# TODO: do more checks that the commit will succeed before
3155
# spending the user's valuable time typing a commit message.
3204
3157
properties = {}
3206
3159
tree, selected_list = WorkingTree.open_containing_paths(selected_list)
3283
3236
reporter=None, verbose=verbose, revprops=properties,
3284
3237
authors=author, timestamp=commit_stamp,
3285
3238
timezone=offset,
3286
exclude=tree.safe_relpath_files(exclude),
3239
exclude=tree.safe_relpath_files(exclude))
3288
3240
except PointlessCommit:
3289
3241
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.")
3242
" Use --unchanged to commit anyhow.")
3292
3243
except ConflictsInTree:
3293
3244
raise errors.BzrCommandError('Conflicts detected in working '
3294
3245
'tree. Use "bzr conflicts" to list, "bzr resolve FILE" to'
3472
3423
self.outf.write(c.username() + '\n')
3476
raise errors.BzrCommandError("--email can only be used to display existing "
3479
3426
# display a warning if an email address isn't included in the given name.
3481
3428
_mod_config.extract_email_address(name)
4633
4580
@display_command
4634
4581
def run(self, verbose=False):
4635
from bzrlib import plugin
4636
self.outf.writelines(
4637
plugin.describe_plugins(show_paths=verbose))
4582
import bzrlib.plugin
4583
from inspect import getdoc
4585
for name, plugin in bzrlib.plugin.plugins().items():
4586
version = plugin.__version__
4587
if version == 'unknown':
4589
name_ver = '%s %s' % (name, version)
4590
d = getdoc(plugin.module)
4592
doc = d.split('\n')[0]
4594
doc = '(no description)'
4595
result.append((name_ver, doc, plugin.path()))
4596
for name_ver, doc, path in sorted(result):
4597
self.outf.write("%s\n" % name_ver)
4598
self.outf.write(" %s\n" % doc)
4600
self.outf.write(" %s\n" % path)
4601
self.outf.write("\n")
4640
4604
class cmd_testament(Command):
4693
4657
@display_command
4694
4658
def run(self, filename, all=False, long=False, revision=None,
4695
4659
show_ids=False, directory=None):
4696
from bzrlib.annotate import (
4660
from bzrlib.annotate import annotate_file, annotate_file_tree
4699
4661
wt, branch, relpath = \
4700
4662
_open_directory_or_containing_tree_or_branch(filename, directory)
4701
4663
if wt is not None:
4704
4666
self.add_cleanup(branch.lock_read().unlock)
4705
4667
tree = _get_one_revision_tree('annotate', revision, branch=branch)
4706
4668
self.add_cleanup(tree.lock_read().unlock)
4707
if wt is not None and revision is None:
4708
4670
file_id = wt.path2id(relpath)
4710
4672
file_id = tree.path2id(relpath)
4711
4673
if file_id is None:
4712
4674
raise errors.NotVersionedError(filename)
4675
file_version = tree.inventory[file_id].revision
4713
4676
if wt is not None and revision is None:
4714
4677
# If there is a tree and we're not annotating historical
4715
4678
# versions, annotate the working tree's content.
4716
4679
annotate_file_tree(wt, file_id, self.outf, long, all,
4717
4680
show_ids=show_ids)
4719
annotate_file_tree(tree, file_id, self.outf, long, all,
4720
show_ids=show_ids, branch=branch)
4682
annotate_file(branch, file_version, file_id, long, all, self.outf,
4723
4686
class cmd_re_sign(Command):
5552
5515
revno = branch.revision_id_to_dotted_revno(revid)
5553
5516
if isinstance(revno, tuple):
5554
5517
revno = '.'.join(map(str, revno))
5555
except (errors.NoSuchRevision, errors.GhostRevisionsHaveNoRevno):
5518
except errors.NoSuchRevision:
5556
5519
# Bad tag data/merges can lead to tagged revisions
5557
5520
# which are not in this branch. Fail gracefully ...
6090
6053
takes_options = ['directory',
6091
6054
Option('ignored', help='Delete all ignored files.'),
6092
Option('detritus', help='Delete conflict files, merge and revert'
6055
Option('detritus', help='Delete conflict files, merge'
6093
6056
' backups, and failed selftest dirs.'),
6094
6057
Option('unknown',
6095
6058
help='Delete files unknown to bzr (default).'),
6154
6117
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
6120
def _register_lazy_builtins():
6168
6121
# register lazy builtins from other modules; called at startup and should
6169
6122
# be only called once.