~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

Rework test_script a little bit.


Don't allow someone to request a stdin request to echo.
Echo never reads from stdin, it just echos its arguments.
You use 'cat' if you want to read from stdin.

A few other fixes because the tests were using filenames
that are actually illegal on Windows, rather than just
nonexistant.


Change the exception handling for commands so that
unknown errors don't get silently squashed and then
turn into hard-to-debug errors later.

test_script now passes on Windows.

Show diffs side-by-side

added added

removed removed

Lines of Context:
431
431
        for node in bt.iter_all_entries():
432
432
            # Node is made up of:
433
433
            # (index, key, value, [references])
434
 
            self.outf.write('%s\n' % (node[1:],))
 
434
            refs_as_tuples = tuple([tuple([tuple(ref) for ref in ref_list])
 
435
                                   for ref_list in node[3]])
 
436
            as_tuple = (tuple(node[1]), node[2], refs_as_tuples)
 
437
            self.outf.write('%s\n' % (as_tuple,))
435
438
 
436
439
 
437
440
class cmd_remove_tree(Command):
461
464
            raise errors.BzrCommandError("You cannot remove the working tree"
462
465
                                         " of a remote path")
463
466
        if not force:
464
 
            # XXX: What about pending merges ? -- vila 20090629
465
 
            if working.has_changes(working.basis_tree()):
 
467
            if (working.has_changes()):
466
468
                raise errors.UncommittedChanges(working)
467
469
 
468
470
        working_path = working.bzrdir.root_transport.base
653
655
        if base_tree:
654
656
            base_tree.lock_read()
655
657
        try:
656
 
            file_list = self._maybe_expand_globs(file_list)
657
658
            tree, file_list = tree_files_for_add(file_list)
658
659
            added, ignored = tree.smart_add(file_list, not
659
660
                no_recurse, action=action, save=not dry_run)
1109
1110
        else:
1110
1111
            revision_id = None
1111
1112
        if strict and tree is not None and revision_id is None:
1112
 
            if (tree.has_changes(tree.basis_tree())
1113
 
                or len(tree.get_parent_ids()) > 1):
 
1113
            if (tree.has_changes()):
1114
1114
                raise errors.UncommittedChanges(
1115
1115
                    tree, more='Use --no-strict to force the push.')
1116
1116
            if tree.last_revision() != tree.branch.last_revision():
1887
1887
    @display_command
1888
1888
    def run(self, revision=None, file_list=None, diff_options=None,
1889
1889
            prefix=None, old=None, new=None, using=None):
1890
 
        from bzrlib.diff import _get_trees_to_diff, show_diff_trees
 
1890
        from bzrlib.diff import get_trees_and_branches_to_diff, show_diff_trees
1891
1891
 
1892
1892
        if (prefix is None) or (prefix == '0'):
1893
1893
            # diff -p0 format
1907
1907
            raise errors.BzrCommandError('bzr diff --revision takes exactly'
1908
1908
                                         ' one or two revision specifiers')
1909
1909
 
1910
 
        old_tree, new_tree, specific_files, extra_trees = \
1911
 
                _get_trees_to_diff(file_list, revision, old, new,
1912
 
                apply_view=True)
 
1910
        (old_tree, new_tree,
 
1911
         old_branch, new_branch,
 
1912
         specific_files, extra_trees) = get_trees_and_branches_to_diff(
 
1913
            file_list, revision, old, new, apply_view=True)
1913
1914
        return show_diff_trees(old_tree, new_tree, sys.stdout,
1914
1915
                               specific_files=specific_files,
1915
1916
                               external_diff_options=diff_options,
3025
3026
        def get_message(commit_obj):
3026
3027
            """Callback to get commit message"""
3027
3028
            my_message = message
 
3029
            if my_message is not None and '\r' in my_message:
 
3030
                my_message = my_message.replace('\r\n', '\n')
 
3031
                my_message = my_message.replace('\r', '\n')
3028
3032
            if my_message is None and not file:
3029
3033
                t = make_commit_message_template_encoded(tree,
3030
3034
                        selected_list, diff=show_diff,
3347
3351
    Tests that need working space on disk use a common temporary directory,
3348
3352
    typically inside $TMPDIR or /tmp.
3349
3353
 
 
3354
    If you set BZR_TEST_PDB=1 when running selftest, failing tests will drop
 
3355
    into a pdb postmortem session.
 
3356
 
3350
3357
    :Examples:
3351
3358
        Run only tests relating to 'ignore'::
3352
3359
 
3389
3396
                     Option('lsprof-timed',
3390
3397
                            help='Generate lsprof output for benchmarked'
3391
3398
                                 ' sections of code.'),
 
3399
                     Option('lsprof-tests',
 
3400
                            help='Generate lsprof output for each test.'),
3392
3401
                     Option('cache-dir', type=str,
3393
3402
                            help='Cache intermediate benchmark output in this '
3394
3403
                                 'directory.'),
3435
3444
            first=False, list_only=False,
3436
3445
            randomize=None, exclude=None, strict=False,
3437
3446
            load_list=None, debugflag=None, starting_with=None, subunit=False,
3438
 
            parallel=None):
 
3447
            parallel=None, lsprof_tests=False):
3439
3448
        from bzrlib.tests import selftest
3440
3449
        import bzrlib.benchmarks as benchmarks
3441
3450
        from bzrlib.benchmarks import tree_creator
3475
3484
                              "transport": transport,
3476
3485
                              "test_suite_factory": test_suite_factory,
3477
3486
                              "lsprof_timed": lsprof_timed,
 
3487
                              "lsprof_tests": lsprof_tests,
3478
3488
                              "bench_history": benchfile,
3479
3489
                              "matching_tests_first": first,
3480
3490
                              "list_only": list_only,
3657
3667
        verified = 'inapplicable'
3658
3668
        tree = WorkingTree.open_containing(directory)[0]
3659
3669
 
3660
 
        # die as quickly as possible if there are uncommitted changes
3661
3670
        try:
3662
3671
            basis_tree = tree.revision_tree(tree.last_revision())
3663
3672
        except errors.NoSuchRevision:
3664
3673
            basis_tree = tree.basis_tree()
 
3674
 
 
3675
        # die as quickly as possible if there are uncommitted changes
3665
3676
        if not force:
3666
 
            if tree.has_changes(basis_tree):
 
3677
            if tree.has_changes():
3667
3678
                raise errors.UncommittedChanges(tree)
3668
3679
 
3669
3680
        view_info = _get_view_info_for_change_reporter(tree)
3720
3731
                                       merger.other_rev_id)
3721
3732
                    result.report(self.outf)
3722
3733
                    return 0
3723
 
            merger.check_basis(False)
 
3734
            if merger.this_basis is None:
 
3735
                raise errors.BzrCommandError(
 
3736
                    "This branch has no commits."
 
3737
                    " (perhaps you would prefer 'bzr pull')")
3724
3738
            if preview:
3725
3739
                return self._do_preview(merger, cleanups)
3726
3740
            elif interactive:
4506
4520
    before they will be applied to the local branch.
4507
4521
 
4508
4522
    Bound branches use the nickname of its master branch unless it is set
4509
 
    locally, in which case binding will update the the local nickname to be
 
4523
    locally, in which case binding will update the local nickname to be
4510
4524
    that of the master.
4511
4525
    """
4512
4526
 
4969
4983
 
4970
4984
    To use a specific mail program, set the mail_client configuration option.
4971
4985
    (For Thunderbird 1.5, this works around some bugs.)  Supported values for
4972
 
    specific clients are "claws", "evolution", "kmail", "mutt", and
4973
 
    "thunderbird"; generic options are "default", "editor", "emacsclient",
4974
 
    "mapi", and "xdg-email".  Plugins may also add supported clients.
 
4986
    specific clients are "claws", "evolution", "kmail", "mail.app" (MacOS X's
 
4987
    Mail.app), "mutt", and "thunderbird"; generic options are "default",
 
4988
    "editor", "emacsclient", "mapi", and "xdg-email".  Plugins may also add
 
4989
    supported clients.
4975
4990
 
4976
4991
    If mail is being sent, a to address is required.  This can be supplied
4977
4992
    either on the commandline, by setting the submit_to configuration
5356
5371
    /path/to/newbranch.
5357
5372
 
5358
5373
    Bound branches use the nickname of its master branch unless it is set
5359
 
    locally, in which case switching will update the the local nickname to be
 
5374
    locally, in which case switching will update the local nickname to be
5360
5375
    that of the master.
5361
5376
    """
5362
5377