~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to __init__.py

  • Committer: Aaron Bentley
  • Date: 2007-07-12 20:58:10 UTC
  • Revision ID: abentley@panoramicfeedback.com-20070712205810-kvfhbvzbr0loiu0m
Fix the --no-fix option of fetch-ghosts

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
import bzrlib
24
24
 
25
25
 
26
 
__version__ = '0.15.0'
 
26
__version__ = '0.19.0'
27
27
 
28
28
 
29
29
version_info = tuple(int(n) for n in __version__.split('.'))
39
39
    """
40
40
    desired_plus = (desired[0], desired[1]+1)
41
41
    bzrlib_version = bzrlib.version_info[:2]
42
 
    if bzrlib_version == desired:
 
42
    if bzrlib_version == desired or (bzrlib_version == desired_plus and
 
43
                                     bzrlib.version_info[3] == 'dev'):
43
44
        return
44
45
    try:
45
46
        from bzrlib.trace import warning
47
48
        # get the message out any way we can
48
49
        from warnings import warn as warning
49
50
    if bzrlib_version < desired:
50
 
        warning('Installed Bazzar version %s is too old to be used with'
 
51
        warning('Installed Bazaar version %s is too old to be used with'
51
52
                ' plugin \n'
52
53
                '"Bzrtools" %s.' % (bzrlib.__version__, __version__))
53
54
        # Not using BzrNewError, because it may not exist.
64
65
 
65
66
check_bzrlib_version(version_info[:2])
66
67
 
 
68
from bzrlib.lazy_import import lazy_import
 
69
lazy_import(globals(), """
 
70
from bzrlib import help
 
71
import shelf
 
72
""")
67
73
 
68
74
from errors import CommandError, NoPyBaz
69
75
from patchsource import BzrPatchSource
70
 
from shelf import Shelf
71
76
import sys
72
77
import os.path
73
78
 
75
80
import bzrlib.commands
76
81
from bzrlib.commands import get_cmd_object
77
82
from bzrlib.errors import BzrCommandError
78
 
from bzrlib.help import command_usage
79
83
import bzrlib.ignores
80
84
from bzrlib.option import Option
81
 
sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), 
 
85
sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__),
82
86
                                                 "external")))
83
87
 
84
88
import show_paths
101
105
 
102
106
    To check what clean-tree will do, use --dry-run.
103
107
    """
104
 
    takes_options = [Option('ignored', help='delete all ignored files.'), 
105
 
                     Option('detritus', help='delete conflict files, merge'
106
 
                            ' backups, and failed selftest dirs.'), 
107
 
                     Option('unknown', 
108
 
                            help='delete files unknown to bzr.  (default)'),
109
 
                     Option('dry-run', help='show files to delete instead of'
 
108
    takes_options = [Option('ignored', help='Delete all ignored files.'),
 
109
                     Option('detritus', help='Delete conflict files, merge'
 
110
                            ' backups, and failed selftest dirs.'),
 
111
                     Option('unknown',
 
112
                            help='Delete files unknown to bzr (default).'),
 
113
                     Option('dry-run', help='Show files to delete instead of'
110
114
                            ' deleting them.')]
111
115
    def run(self, unknown=False, ignored=False, detritus=False, dry_run=False):
112
116
        from clean_tree import clean_tree
128
132
    with the last 5 characters of their revision identifier are used instead.
129
133
 
130
134
    The value starting with d is "(maximum) distance from the null revision".
131
 
    
 
135
 
132
136
    If --merge-branch is specified, the two branches are compared and a merge
133
137
    base is selected.
134
 
    
 
138
 
135
139
    Legend:
136
140
    white    normal revision
137
141
    yellow   THIS  history
151
155
    If available, rsvg is used to antialias PNG and JPEG output, but this can
152
156
    be disabled with --no-antialias.
153
157
    """
154
 
    takes_args = ['branch', 'file']
155
 
    takes_options = [Option('no-collapse', help="Do not skip simple nodes"), 
 
158
    takes_args = ['file', 'merge_branch?']
 
159
    takes_options = [Option('no-collapse', help="Do not skip simple nodes."),
156
160
                     Option('no-antialias',
157
 
                     help="Do not use rsvg to produce antialiased output"), 
158
 
                     Option('merge-branch', type=str, 
159
 
                     help="Use this branch to calcuate a merge base"), 
 
161
                     help="Do not use rsvg to produce antialiased output."),
 
162
                     Option('merge-branch', type=str,
 
163
                     help="Use this branch to calcuate a merge base."),
160
164
                     Option('cluster', help="Use clustered output."),
161
 
                     Option('max-distance', help="Show no nodes farther than this",
162
 
                            type=int)]
163
 
    def run(self, branch, file, no_collapse=False, no_antialias=False,
164
 
        merge_branch=None, cluster=False, max_distance=None):
 
165
                     Option('max-distance',
 
166
                            help="Show no nodes farther than this.", type=int),
 
167
                     Option('directory',
 
168
                            help='Source branch to use (default is current'
 
169
                            ' directory).',
 
170
                            short_name='d',
 
171
                            type=unicode),
 
172
                    ]
 
173
    def run(self, file, merge_branch=None, no_collapse=False,
 
174
            no_antialias=False, cluster=False, max_distance=100,
 
175
            directory='.'):
 
176
        if max_distance == -1:
 
177
            max_distance = None
165
178
        import graph
166
179
        if cluster:
167
180
            ranking = "cluster"
168
181
        else:
169
182
            ranking = "forced"
170
 
        graph.write_ancestry_file(branch, file, not no_collapse, 
171
 
                                  not no_antialias, merge_branch, ranking, 
 
183
        graph.write_ancestry_file(directory, file, not no_collapse,
 
184
                                  not no_antialias, merge_branch, ranking,
172
185
                                  max_distance=max_distance)
173
186
 
174
187
 
178
191
    """
179
192
    aliases = ['fetch-missing']
180
193
    takes_args = ['branch?']
181
 
    takes_options = [Option('no-fix')]
 
194
    takes_options = [Option('no-fix', help="Skip additional synchonization.")]
182
195
    def run(self, branch=None, no_fix=False):
183
196
        from fetch_ghosts import fetch_ghosts
184
197
        fetch_ghosts(branch, no_fix)
192
205
    """
193
206
    takes_args = ['filename?']
194
207
    takes_options = [Option('strip', type=int, help=strip_help),
195
 
                     Option('silent', help='Suppress chatter')]
 
208
                     Option('silent', help='Suppress chatter.')]
196
209
    def run(self, filename=None, strip=None, silent=False):
197
210
        from patch import patch
198
211
        from bzrlib.workingtree import WorkingTree
233
246
    """
234
247
 
235
248
    takes_args = ['file*']
236
 
    takes_options = ['message', 'revision',
237
 
            Option('all', help='Shelve all changes without prompting'), 
238
 
            Option('no-color', help='Never display changes in color')]
 
249
    takes_options = [Option('message',
 
250
            help='A message to associate with the shelved changes.',
 
251
            short_name='m'),
 
252
            'revision',
 
253
            Option('all', help='Shelve all changes without prompting.'),
 
254
            Option('no-color', help='Never display changes in color.')]
239
255
 
240
256
    def run(self, all=False, file_list=None, message=None, revision=None,
241
257
            no_color=False):
247
263
                                  "parameter.")
248
264
 
249
265
        source = BzrPatchSource(revision, file_list)
250
 
        s = Shelf(source.base)
 
266
        s = shelf.Shelf(source.base)
251
267
        s.shelve(source, all, message, no_color)
252
268
        return 0
253
269
 
275
291
    aliases = ['switch']
276
292
    takes_args = ['othershelf']
277
293
    def run(self, othershelf):
278
 
        s = Shelf(self.shelf.base, othershelf)
 
294
        s = shelf.Shelf(self.shelf.base, othershelf)
279
295
        s.make_default()
280
296
 
281
297
 
308
324
            args_list = []
309
325
        cmd = self._get_cmd_object(subcommand)
310
326
        source = BzrPatchSource()
311
 
        s = Shelf(source.base)
 
327
        s = shelf.Shelf(source.base)
312
328
        cmd.shelf = s
 
329
 
 
330
        if args_list is None:
 
331
            args_list = []
313
332
        return cmd.run_argv_aliases(args_list)
314
333
 
315
334
    def _get_cmd_object(self, cmd_name):
332
351
        cmd_obj = cmd_class()
333
352
        indent = 2 * ' '
334
353
 
335
 
        usage = command_usage(cmd_obj)
 
354
        usage = cmd_obj._usage()
336
355
        usage = usage.replace('bzr shelf-', '')
337
356
        text.append('%s%s\n' % (indent, usage))
338
357
 
366
385
    See 'shelve' for more information.
367
386
    """
368
387
    takes_options = [
369
 
            Option('all', help='Unshelve all changes without prompting'),
370
 
            Option('force', help='Force unshelving even if errors occur'),
371
 
            Option('no-color', help='Never display changes in color')
 
388
            Option('all', help='Unshelve all changes without prompting.'),
 
389
            Option('force', help='Force unshelving even if errors occur.'),
 
390
            Option('no-color', help='Never display changes in color.')
372
391
        ]
373
392
    takes_args = ['patch?']
374
393
    def run(self, patch=None, all=False, force=False, no_color=False):
375
394
        source = BzrPatchSource()
376
 
        s = Shelf(source.base)
 
395
        s = shelf.Shelf(source.base)
377
396
        s.unshelve(source, patch, all, force, no_color)
378
397
        return 0
379
398
 
411
430
    """
412
431
    takes_args = ["branch?"]
413
432
    def run(self, branch=None):
414
 
        from branchhistory import branch_history 
 
433
        from branchhistory import branch_history
415
434
        return branch_history(branch)
416
435
 
417
436
 
426
445
    If --branch is specified, the branch will be deleted too, but only if the
427
446
    the branch has no new commits (relative to its parent).
428
447
    """
429
 
    takes_options = [Option("branch", help="Remove associtated branch from"
430
 
                                           " repository")]
 
448
    takes_options = [Option("branch", help="Remove associated branch from"
 
449
                                           " repository.")]
431
450
    takes_args = ["checkout"]
432
451
    def run(self, checkout, branch=False):
433
452
        from zap import zap
437
456
class cmd_cbranch(bzrlib.commands.Command):
438
457
    """
439
458
    Create a new checkout, associated with a new repository branch.
440
 
    
 
459
 
441
460
    When you cbranch, bzr looks up a target location in locations.conf, and
442
461
    creates the branch there.
443
462
 
447
466
    cbranch_target:policy = appendpath
448
467
 
449
468
    This will mean that if you run "bzr cbranch foo/bar foo/baz" in the
450
 
    working directory root, the branch will be created in 
 
469
    working directory root, the branch will be created in
451
470
    "/branch_root/foo/baz"
452
471
 
453
472
    NOTE: cbranch also supports "cbranch_root", but that behaviour is
454
473
    deprecated.
455
474
    """
456
 
    takes_options = [Option("lightweight", 
457
 
                            help="Create a lightweight checkout"), 'revision']
 
475
    takes_options = [Option("lightweight",
 
476
                            help="Create a lightweight checkout."), 'revision']
458
477
    takes_args = ["source", "target?"]
459
478
    def run(self, source, target=None, lightweight=False, revision=None):
460
479
        from cbranch import cbranch
461
 
        return cbranch(source, target, lightweight=lightweight, 
 
480
        return cbranch(source, target, lightweight=lightweight,
462
481
                       revision=revision)
463
482
 
464
483
 
472
491
 
473
492
class cmd_multi_pull(bzrlib.commands.Command):
474
493
    """Pull all the branches under a location, e.g. a repository.
475
 
    
 
494
 
476
495
    Both branches present in the directory and the branches of checkouts are
477
496
    pulled.
478
497
    """
522
541
    These marks can be used to track a branch's status.
523
542
    """
524
543
    takes_args = ['mark?', 'branch?']
525
 
    takes_options = [Option('delete', help='Delete this mark')]
 
544
    takes_options = [Option('delete', help='Delete this mark.')]
526
545
    def run(self, mark=None, branch=None, delete=False):
527
546
        from branch_mark import branch_mark
528
547
        branch_mark(mark, branch, delete)
530
549
 
531
550
class cmd_import(bzrlib.commands.Command):
532
551
    """Import sources from a directory, tarball or zip file
533
 
    
 
552
 
534
553
    This command will import a directory, tarball or zip file into a bzr
535
554
    tree, replacing any versioned files already present.  If a directory is
536
555
    specified, it is used as the target.  If the directory does not exist, or
541
560
    If the tarball or zip has a single root directory, that directory is
542
561
    stripped when extracting the tarball.  This is not done for directories.
543
562
    """
544
 
    
 
563
 
545
564
    takes_args = ['source', 'tree?']
546
565
    def run(self, source, tree=None):
547
566
        from upstream_import import do_import
571
590
 
572
591
    This command should be used on local archives (or mirrors) only.  It is
573
592
    quite slow on remote archives.
574
 
    
575
 
    reuse_history allows you to specify any previous imports you 
 
593
 
 
594
    reuse_history allows you to specify any previous imports you
576
595
    have done of different archives, which this archive has branches
577
 
    tagged from. This will dramatically reduce the time to convert 
 
596
    tagged from. This will dramatically reduce the time to convert
578
597
    the archive as it will not have to convert the history already
579
598
    converted in that other branch.
580
599
 
593
612
    """
594
613
    takes_args = ['to_root_dir', 'from_archive', 'reuse_history*']
595
614
    takes_options = ['verbose', Option('prefixes', type=str,
596
 
                     help="Prefixes of branches to import, colon-separated"),
597
 
                     Option('encoding', type=str, 
 
615
                     help="Prefixes of branches to import, colon-separated."),
 
616
                     Option('encoding', type=str,
598
617
                     help='Force encoding to specified value.  See WARNING.')]
599
618
 
600
619
    def run(self, to_root_dir, from_archive, encoding=None, verbose=False,
620
639
    """
621
640
    takes_args = ['to_location', 'from_branch?', 'reuse_history*']
622
641
    takes_options = ['verbose', Option('max-count', type=int),
623
 
                     Option('encoding', type=str, 
 
642
                     Option('encoding', type=str,
624
643
                     help='Force encoding to specified value.  See WARNING.')]
625
644
 
626
645
    def run(self, to_location, from_branch=None, fast=False, max_count=None,
629
648
        from errors import NoPyBaz
630
649
        try:
631
650
            import baz_import
632
 
            baz_import.baz_import_branch(to_location, from_branch, fast, 
 
651
            baz_import.baz_import_branch(to_location, from_branch, fast,
633
652
                                         max_count, verbose, encoding, dry_run,
634
653
                                         reuse_history_list)
635
654
        except NoPyBaz:
639
658
class cmd_rspush(bzrlib.commands.Command):
640
659
    """Upload this branch to another location using rsync.
641
660
 
642
 
    If no location is specified, the last-used location will be used.  To 
643
 
    prevent dirty trees from being uploaded, rspush will error out if there are 
644
 
    unknown files or local changes.  It will also error out if the upstream 
645
 
    directory is non-empty and not an earlier version of the branch. 
 
661
    If no location is specified, the last-used location will be used.  To
 
662
    prevent dirty trees from being uploaded, rspush will error out if there are
 
663
    unknown files or local changes.  It will also error out if the upstream
 
664
    directory is non-empty and not an earlier version of the branch.
646
665
    """
647
666
    takes_args = ['location?']
648
667
    takes_options = [Option('overwrite', help='Ignore differences between'
649
 
                            ' branches and overwrite unconditionally'),
 
668
                            ' branches and overwrite unconditionally.'),
650
669
                     Option('no-tree', help='Do not push the working tree,'
651
670
                            ' just the .bzr.')]
652
671
 
654
673
        from bzrlib import workingtree
655
674
        import bzrtools
656
675
        cur_branch = workingtree.WorkingTree.open_containing(".")[0]
657
 
        bzrtools.rspush(cur_branch, location, overwrite=overwrite, 
 
676
        bzrtools.rspush(cur_branch, location, overwrite=overwrite,
658
677
                      working_tree=not no_tree)
659
678
 
660
679
 
674
693
            cmd_branches,
675
694
            cmd_branch_history,
676
695
            cmd_branch_mark,
677
 
            cmd_cbranch,  
 
696
            cmd_cbranch,
678
697
            cmd_cdiff,
679
698
            cmd_clean_tree,
680
699
            cmd_fetch_ghosts,
683
702
            cmd_multi_pull,
684
703
            cmd_patch,
685
704
            cmd_rspush,
686
 
            cmd_shelf, 
 
705
            cmd_shelf,
687
706
            cmd_shell,
688
 
            cmd_shelve, 
 
707
            cmd_shelve,
689
708
            cmd_switch,
690
 
            cmd_unshelve, 
691
 
            cmd_zap,            
 
709
            cmd_unshelve,
 
710
            cmd_zap,
692
711
            ]
693
712
 
694
713
 
704
723
    from unittest import TestSuite
705
724
    import bzrtools
706
725
    import tests.clean_tree
 
726
    import tests.is_clean
707
727
    import tests.upstream_import
708
728
    import zap
709
729
    import tests.blackbox
721
741
    result.addTest(tests.blackbox.test_suite())
722
742
    result.addTest(tests.upstream_import.test_suite())
723
743
    result.addTest(zap.test_suite())
 
744
    result.addTest(TestLoader().loadTestsFromModule(tests.is_clean))
724
745
    return result