1
# Copyright (C) 2005, 2006 Aaron Bentley <aaron.bentley@utoronto.ca>
1
# Copyright (C) 2005, 2006, 2007 Aaron Bentley <aaron.bentley@utoronto.ca>
2
2
# Copyright (C) 2005, 2006 Canonical Limited.
3
3
# Copyright (C) 2006 Michael Ellerman.
47
47
# get the message out any way we can
48
48
from warnings import warn as warning
49
49
if bzrlib_version < desired:
50
warning('Installed bzr version %s is too old to be used with bzrtools'
51
' %s.' % (bzrlib.__version__, __version__))
50
warning('Installed Bazaar version %s is too old to be used with'
52
'"Bzrtools" %s.' % (bzrlib.__version__, __version__))
52
53
# Not using BzrNewError, because it may not exist.
53
54
raise Exception, ('Version mismatch', version_info)
55
warning('Bzrtools is not up to date with installed bzr version %s.'
56
' \nThere should be a newer version available, e.g. %i.%i.'
56
warning('Plugin "Bzrtools" is not up to date with installed Bazaar'
58
' There should be a newer version of Bzrtools available, e.g.'
57
60
% (bzrlib.__version__, bzrlib_version[0], bzrlib_version[1]))
58
61
if bzrlib_version != desired_plus:
59
62
raise Exception, 'Version mismatch'
62
65
check_bzrlib_version(version_info[:2])
67
from bzrlib.lazy_import import lazy_import
68
lazy_import(globals(), """
69
from bzrlib import help
65
73
from errors import CommandError, NoPyBaz
66
74
from patchsource import BzrPatchSource
67
from shelf import Shelf
72
79
import bzrlib.commands
73
80
from bzrlib.commands import get_cmd_object
74
81
from bzrlib.errors import BzrCommandError
75
from bzrlib.help import command_usage
76
82
import bzrlib.ignores
77
83
from bzrlib.option import Option
78
84
sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__),
154
160
help="Do not use rsvg to produce antialiased output"),
155
161
Option('merge-branch', type=str,
156
162
help="Use this branch to calcuate a merge base"),
157
Option('cluster', help="Use clustered output.")]
163
Option('cluster', help="Use clustered output."),
164
Option('max-distance', help="Show no nodes farther than this",
158
166
def run(self, branch, file, no_collapse=False, no_antialias=False,
159
merge_branch=None, cluster=False):
167
merge_branch=None, cluster=False, max_distance=None):
162
170
ranking = "cluster"
164
172
ranking = "forced"
165
173
graph.write_ancestry_file(branch, file, not no_collapse,
166
not no_antialias, merge_branch, ranking)
174
not no_antialias, merge_branch, ranking,
175
max_distance=max_distance)
169
178
class cmd_fetch_ghosts(bzrlib.commands.Command):
185
194
"""Apply a named patch to the current tree.
187
196
takes_args = ['filename?']
188
takes_options = [Option('strip', type=int, help=strip_help)]
189
def run(self, filename=None, strip=None):
197
takes_options = [Option('strip', type=int, help=strip_help),
198
Option('silent', help='Suppress chatter')]
199
def run(self, filename=None, strip=None, silent=False):
190
200
from patch import patch
191
201
from bzrlib.workingtree import WorkingTree
192
202
wt = WorkingTree.open_containing('.')[0]
193
203
if strip is None:
195
return patch(wt, filename, strip)
205
return patch(wt, filename, strip, silent)
198
208
class cmd_shelve(bzrlib.commands.Command):
242
252
source = BzrPatchSource(revision, file_list)
243
s = Shelf(source.base)
253
s = shelf.Shelf(source.base)
244
254
s.shelve(source, all, message, no_color)
268
278
aliases = ['switch']
269
279
takes_args = ['othershelf']
270
280
def run(self, othershelf):
271
s = Shelf(self.shelf.base, othershelf)
281
s = shelf.Shelf(self.shelf.base, othershelf)
302
312
cmd = self._get_cmd_object(subcommand)
303
313
source = BzrPatchSource()
304
s = Shelf(source.base)
314
s = shelf.Shelf(source.base)
317
if args_list is None:
306
319
return cmd.run_argv_aliases(args_list)
308
321
def _get_cmd_object(self, cmd_name):
325
338
cmd_obj = cmd_class()
328
usage = command_usage(cmd_obj)
341
usage = help.command_usage(cmd_obj)
329
342
usage = usage.replace('bzr shelf-', '')
330
343
text.append('%s%s\n' % (indent, usage))
366
379
takes_args = ['patch?']
367
380
def run(self, patch=None, all=False, force=False, no_color=False):
368
381
source = BzrPatchSource()
369
s = Shelf(source.base)
382
s = shelf.Shelf(source.base)
370
383
s.unshelve(source, patch, all, force, no_color)
432
445
Create a new checkout, associated with a new repository branch.
434
When you cbranch, bzr looks up the repository associated with your current
435
directory in locations.conf. It creates a new branch in that repository
436
with the same name and relative path as the checkout you request.
438
The locations.conf parameter is "cbranch_root". So if you want
439
cbranch operations in /home/jrandom/bigproject to produce branches in
440
/home/jrandom/bigproject/repository, you'd add this:
442
[/home/jrandom/bigproject]
443
cbranch_root = /home/jrandom/bigproject/repository
445
Note that if "/home/jrandom/bigproject/repository" isn't a repository,
446
standalone branches will be produced. Standalone branches will also
447
be produced if the source branch is in 0.7 format (or earlier).
447
When you cbranch, bzr looks up a target location in locations.conf, and
448
creates the branch there.
450
In your locations.conf, add the following lines:
451
[/working_directory_root]
452
cbranch_target = /branch_root
453
cbranch_target:policy = appendpath
455
This will mean that if you run "bzr cbranch foo/bar foo/baz" in the
456
working directory root, the branch will be created in
457
"/branch_root/foo/baz"
459
NOTE: cbranch also supports "cbranch_root", but that behaviour is
449
462
takes_options = [Option("lightweight",
450
463
help="Create a lightweight checkout"), 'revision']
524
537
class cmd_import(bzrlib.commands.Command):
525
"""Import sources from a tarball
538
"""Import sources from a directory, tarball or zip file
527
This command will import a tarball into a bzr tree, replacing any versioned
528
files already present. If a directory is specified, it is used as the
529
target. If the directory does not exist, or is not versioned, it is
540
This command will import a directory, tarball or zip file into a bzr
541
tree, replacing any versioned files already present. If a directory is
542
specified, it is used as the target. If the directory does not exist, or
543
is not versioned, it is created.
532
545
Tarballs may be gzip or bzip2 compressed. This is autodetected.
534
If the tarball has a single root directory, that directory is stripped
535
when extracting the tarball.
547
If the tarball or zip has a single root directory, that directory is
548
stripped when extracting the tarball. This is not done for directories.
538
551
takes_args = ['source', 'tree?']
544
557
class cmd_cdiff(bzrlib.commands.Command):
545
558
"""A color version of bzr's diff"""
546
559
takes_args = property(lambda x: get_cmd_object('diff').takes_args)
547
takes_options = property(lambda x: get_cmd_object('diff').takes_options)
548
def run(*args, **kwargs):
561
def _takes_options(self):
562
options = list(get_cmd_object('diff').takes_options)
563
options.append(Option('check-style',
564
help='Warn if trailing whitespace or spurious changes have been'
568
takes_options = property(_takes_options)
570
def run(self, check_style=False, *args, **kwargs):
549
571
from colordiff import colordiff
550
colordiff(*args, **kwargs)
572
colordiff(check_style, *args, **kwargs)
553
575
class cmd_baz_import(bzrlib.commands.Command):
703
726
result.addTest(tests.test_suite())
704
727
result.addTest(TestLoader().loadTestsFromModule(tests.shelf_tests))
705
728
result.addTest(tests.blackbox.test_suite())
706
result.addTest(upstream_import.test_suite())
729
result.addTest(tests.upstream_import.test_suite())
707
730
result.addTest(zap.test_suite())
731
result.addTest(TestLoader().loadTestsFromModule(tests.is_clean))