/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: Martin
  • Date: 2010-04-02 19:12:58 UTC
  • mto: (5177.1.1 integration2)
  • mto: This revision was merged to the branch mainline in revision 5179.
  • Revision ID: gzlist@googlemail.com-20100402191258-xrwedy2ffe0q4t7x
Permit bzrlib to run under python -OO by explictly assigning to __doc__ for user-visible docstrings

Show diffs side-by-side

added added

removed removed

Lines of Context:
504
504
                if (working.has_changes()):
505
505
                    raise errors.UncommittedChanges(working)
506
506
 
507
 
            if working.user_url != working.branch.user_url:
 
507
            working_path = working.bzrdir.root_transport.base
 
508
            branch_path = working.branch.bzrdir.root_transport.base
 
509
            if working_path != branch_path:
508
510
                raise errors.BzrCommandError("You cannot remove the working tree"
509
511
                                             " from a lightweight checkout")
510
512
 
986
988
        try:
987
989
            tree_to = WorkingTree.open_containing(directory)[0]
988
990
            branch_to = tree_to.branch
989
 
            tree_to.lock_write()
990
 
            self.add_cleanup(tree_to.unlock)
991
991
        except errors.NoWorkingTree:
992
992
            tree_to = None
993
993
            branch_to = Branch.open_containing(directory)[0]
994
 
            branch_to.lock_write()
995
 
            self.add_cleanup(branch_to.unlock)
996
 
 
 
994
        
997
995
        if local and not branch_to.get_bound_location():
998
996
            raise errors.LocalRequiresBoundBranch()
999
997
 
1029
1027
        else:
1030
1028
            branch_from = Branch.open(location,
1031
1029
                possible_transports=possible_transports)
 
1030
 
 
1031
            if branch_to.get_parent() is None or remember:
 
1032
                branch_to.set_parent(branch_from.base)
 
1033
 
 
1034
        if branch_from is not branch_to:
1032
1035
            branch_from.lock_read()
1033
1036
            self.add_cleanup(branch_from.unlock)
1034
 
 
1035
 
            if branch_to.get_parent() is None or remember:
1036
 
                branch_to.set_parent(branch_from.base)
1037
 
 
1038
1037
        if revision is not None:
1039
1038
            revision_id = revision.as_revision_id(branch_from)
1040
1039
 
 
1040
        branch_to.lock_write()
 
1041
        self.add_cleanup(branch_to.unlock)
1041
1042
        if tree_to is not None:
1042
1043
            view_info = _get_view_info_for_change_reporter(tree_to)
1043
1044
            change_reporter = delta._ChangeReporter(
1125
1126
        # Get the source branch
1126
1127
        (tree, br_from,
1127
1128
         _unused) = bzrdir.BzrDir.open_containing_tree_or_branch(directory)
 
1129
        if strict is None:
 
1130
            strict = br_from.get_config().get_user_option_as_bool('push_strict')
 
1131
        if strict is None: strict = True # default value
1128
1132
        # Get the tip's revision_id
1129
1133
        revision = _get_one_revision('push', revision)
1130
1134
        if revision is not None:
1131
1135
            revision_id = revision.in_history(br_from).rev_id
1132
1136
        else:
1133
1137
            revision_id = None
1134
 
        if tree is not None and revision_id is None:
1135
 
            tree.check_changed_or_out_of_date(
1136
 
                strict, 'push_strict',
1137
 
                more_error='Use --no-strict to force the push.',
1138
 
                more_warning='Uncommitted changes will not be pushed.')
 
1138
        if strict and tree is not None and revision_id is None:
 
1139
            if (tree.has_changes()):
 
1140
                raise errors.UncommittedChanges(
 
1141
                    tree, more='Use --no-strict to force the push.')
 
1142
            if tree.last_revision() != tree.branch.last_revision():
 
1143
                # The tree has lost sync with its branch, there is little
 
1144
                # chance that the user is aware of it but he can still force
 
1145
                # the push with --no-strict
 
1146
                raise errors.OutOfDateTree(
 
1147
                    tree, more='Use --no-strict to force the push.')
 
1148
 
1139
1149
        # Get the stacked_on branch, if any
1140
1150
        if stacked_on is not None:
1141
1151
            stacked_on = urlutils.normalize_url(stacked_on)
1438
1448
        else:
1439
1449
            revision_id = branch.last_revision()
1440
1450
        if revision_id == _mod_revision.ensure_null(tree.last_revision()):
1441
 
            revno = branch.revision_id_to_dotted_revno(revision_id)
1442
 
            note("Tree is up to date at revision %s of branch %s" %
1443
 
                ('.'.join(map(str, revno)), branch_location))
 
1451
            revno = branch.revision_id_to_revno(revision_id)
 
1452
            note("Tree is up to date at revision %d of branch %s" %
 
1453
                (revno, branch_location))
1444
1454
            return 0
1445
1455
        view_info = _get_view_info_for_change_reporter(tree)
1446
1456
        change_reporter = delta._ChangeReporter(
1458
1468
                                  "bzr update --revision only works"
1459
1469
                                  " for a revision in the branch history"
1460
1470
                                  % (e.revision))
1461
 
        revno = tree.branch.revision_id_to_dotted_revno(
 
1471
        revno = tree.branch.revision_id_to_revno(
1462
1472
            _mod_revision.ensure_null(tree.last_revision()))
1463
 
        note('Updated to revision %s of branch %s' %
1464
 
             ('.'.join(map(str, revno)), branch_location))
1465
 
        parent_ids = tree.get_parent_ids()
1466
 
        if parent_ids[1:] and parent_ids[1:] != existing_pending_merges:
 
1473
        note('Updated to revision %d of branch %s' %
 
1474
             (revno, branch_location))
 
1475
        if tree.get_parent_ids()[1:] != existing_pending_merges:
1467
1476
            note('Your local commits will now show as pending merges with '
1468
1477
                 "'bzr status', and can be committed with 'bzr commit'.")
1469
1478
        if conflicts != 0:
1945
1954
            help='Use this command to compare files.',
1946
1955
            type=unicode,
1947
1956
            ),
1948
 
        RegistryOption('format',
1949
 
            help='Diff format to use.',
1950
 
            lazy_registry=('bzrlib.diff', 'format_registry'),
1951
 
            value_switches=False, title='Diff format'),
1952
1957
        ]
1953
1958
    aliases = ['di', 'dif']
1954
1959
    encoding_type = 'exact'
1955
1960
 
1956
1961
    @display_command
1957
1962
    def run(self, revision=None, file_list=None, diff_options=None,
1958
 
            prefix=None, old=None, new=None, using=None, format=None):
1959
 
        from bzrlib.diff import (get_trees_and_branches_to_diff_locked,
1960
 
            show_diff_trees)
 
1963
            prefix=None, old=None, new=None, using=None):
 
1964
        from bzrlib.diff import get_trees_and_branches_to_diff, show_diff_trees
1961
1965
 
1962
1966
        if (prefix is None) or (prefix == '0'):
1963
1967
            # diff -p0 format
1977
1981
            raise errors.BzrCommandError('bzr diff --revision takes exactly'
1978
1982
                                         ' one or two revision specifiers')
1979
1983
 
1980
 
        if using is not None and format is not None:
1981
 
            raise errors.BzrCommandError('--using and --format are mutually '
1982
 
                'exclusive.')
1983
 
 
1984
1984
        (old_tree, new_tree,
1985
1985
         old_branch, new_branch,
1986
 
         specific_files, extra_trees) = get_trees_and_branches_to_diff_locked(
1987
 
            file_list, revision, old, new, self.add_cleanup, apply_view=True)
 
1986
         specific_files, extra_trees) = get_trees_and_branches_to_diff(
 
1987
            file_list, revision, old, new, apply_view=True)
1988
1988
        return show_diff_trees(old_tree, new_tree, sys.stdout,
1989
1989
                               specific_files=specific_files,
1990
1990
                               external_diff_options=diff_options,
1991
1991
                               old_label=old_label, new_label=new_label,
1992
 
                               extra_trees=extra_trees, using=using,
1993
 
                               format_cls=format)
 
1992
                               extra_trees=extra_trees, using=using)
1994
1993
 
1995
1994
 
1996
1995
class cmd_deleted(Command):
2299
2298
                   help='Show changes made in each revision as a patch.'),
2300
2299
            Option('include-merges',
2301
2300
                   help='Show merged revisions like --levels 0 does.'),
2302
 
            Option('exclude-common-ancestry',
2303
 
                   help='Display only the revisions that are not part'
2304
 
                   ' of both ancestries (require -rX..Y)'
2305
 
                   )
2306
2301
            ]
2307
2302
    encoding_type = 'replace'
2308
2303
 
2318
2313
            message=None,
2319
2314
            limit=None,
2320
2315
            show_diff=False,
2321
 
            include_merges=False,
2322
 
            exclude_common_ancestry=False,
2323
 
            ):
 
2316
            include_merges=False):
2324
2317
        from bzrlib.log import (
2325
2318
            Logger,
2326
2319
            make_log_request_dict,
2327
2320
            _get_info_for_log_files,
2328
2321
            )
2329
2322
        direction = (forward and 'forward') or 'reverse'
2330
 
        if (exclude_common_ancestry
2331
 
            and (revision is None or len(revision) != 2)):
2332
 
            raise errors.BzrCommandError(
2333
 
                '--exclude-common-ancestry requires -r with two revisions')
2334
2323
        if include_merges:
2335
2324
            if levels is None:
2336
2325
                levels = 0
2429
2418
            direction=direction, specific_fileids=file_ids,
2430
2419
            start_revision=rev1, end_revision=rev2, limit=limit,
2431
2420
            message_search=message, delta_type=delta_type,
2432
 
            diff_type=diff_type, _match_using_deltas=match_using_deltas,
2433
 
            exclude_common_ancestry=exclude_common_ancestry,
2434
 
            )
 
2421
            diff_type=diff_type, _match_using_deltas=match_using_deltas)
2435
2422
        Logger(b, rqst).show(lf)
2436
2423
 
2437
2424
 
2661
2648
    using this command or directly by using an editor, be sure to commit
2662
2649
    it.
2663
2650
    
2664
 
    Bazaar also supports a global ignore file ~/.bazaar/ignore. On Windows
2665
 
    the global ignore file can be found in the application data directory as
2666
 
    C:\\Documents and Settings\\<user>\\Application Data\\Bazaar\\2.0\\ignore.
2667
 
    Global ignores are not touched by this command. The global ignore file
2668
 
    can be edited directly using an editor.
2669
 
 
2670
2651
    Patterns prefixed with '!' are exceptions to ignore patterns and take
2671
2652
    precedence over regular ignores.  Such exceptions are used to specify
2672
2653
    files that should be versioned which would otherwise be ignored.
2713
2694
    _see_also = ['status', 'ignored', 'patterns']
2714
2695
    takes_args = ['name_pattern*']
2715
2696
    takes_options = [
2716
 
        Option('default-rules',
2717
 
               help='Display the default ignore rules that bzr uses.')
 
2697
        Option('old-default-rules',
 
2698
               help='Write out the ignore rules bzr < 0.9 always used.')
2718
2699
        ]
2719
2700
 
2720
 
    def run(self, name_pattern_list=None, default_rules=None):
 
2701
    def run(self, name_pattern_list=None, old_default_rules=None):
2721
2702
        from bzrlib import ignores
2722
 
        if default_rules is not None:
2723
 
            # dump the default rules and exit
2724
 
            for pattern in ignores.USER_DEFAULTS:
 
2703
        if old_default_rules is not None:
 
2704
            # dump the rules and exit
 
2705
            for pattern in ignores.OLD_DEFAULTS:
2725
2706
                self.outf.write("%s\n" % pattern)
2726
2707
            return
2727
2708
        if not name_pattern_list:
2728
2709
            raise errors.BzrCommandError("ignore requires at least one "
2729
 
                "NAME_PATTERN or --default-rules.")
 
2710
                                  "NAME_PATTERN or --old-default-rules")
2730
2711
        name_pattern_list = [globbing.normalize_pattern(p)
2731
2712
                             for p in name_pattern_list]
2732
2713
        for name_pattern in name_pattern_list:
3073
3054
                         "the master branch until a normal commit "
3074
3055
                         "is performed."
3075
3056
                    ),
3076
 
             Option('show-diff', short_name='p',
 
3057
             Option('show-diff',
3077
3058
                    help='When no message is supplied, show the diff along'
3078
3059
                    ' with the status summary in the message editor.'),
3079
3060
             ]
3159
3140
                    '(use --file "%(f)s" to take commit message from that file)'
3160
3141
                    % { 'f': message })
3161
3142
                ui.ui_factory.show_warning(warning_msg)
3162
 
            if '\r' in message:
3163
 
                message = message.replace('\r\n', '\n')
3164
 
                message = message.replace('\r', '\n')
3165
 
            if file:
3166
 
                raise errors.BzrCommandError(
3167
 
                    "please specify either --message or --file")
3168
3143
 
3169
3144
        def get_message(commit_obj):
3170
3145
            """Callback to get commit message"""
3171
 
            if file:
3172
 
                my_message = codecs.open(
3173
 
                    file, 'rt', osutils.get_user_encoding()).read()
3174
 
            elif message is not None:
3175
 
                my_message = message
3176
 
            else:
3177
 
                # No message supplied: make one up.
3178
 
                # text is the status of the tree
3179
 
                text = make_commit_message_template_encoded(tree,
 
3146
            my_message = message
 
3147
            if my_message is not None and '\r' in my_message:
 
3148
                my_message = my_message.replace('\r\n', '\n')
 
3149
                my_message = my_message.replace('\r', '\n')
 
3150
            if my_message is None and not file:
 
3151
                t = make_commit_message_template_encoded(tree,
3180
3152
                        selected_list, diff=show_diff,
3181
3153
                        output_encoding=osutils.get_user_encoding())
3182
 
                # start_message is the template generated from hooks
3183
 
                # XXX: Warning - looks like hooks return unicode,
3184
 
                # make_commit_message_template_encoded returns user encoding.
3185
 
                # We probably want to be using edit_commit_message instead to
3186
 
                # avoid this.
3187
3154
                start_message = generate_commit_message_template(commit_obj)
3188
 
                my_message = edit_commit_message_encoded(text,
 
3155
                my_message = edit_commit_message_encoded(t,
3189
3156
                    start_message=start_message)
3190
3157
                if my_message is None:
3191
3158
                    raise errors.BzrCommandError("please specify a commit"
3192
3159
                        " message with either --message or --file")
 
3160
            elif my_message and file:
 
3161
                raise errors.BzrCommandError(
 
3162
                    "please specify either --message or --file")
 
3163
            if file:
 
3164
                my_message = codecs.open(file, 'rt',
 
3165
                                         osutils.get_user_encoding()).read()
3193
3166
            if my_message == "":
3194
3167
                raise errors.BzrCommandError("empty commit message specified")
3195
3168
            return my_message
3207
3180
                        timezone=offset,
3208
3181
                        exclude=safe_relpath_files(tree, exclude))
3209
3182
        except PointlessCommit:
 
3183
            # FIXME: This should really happen before the file is read in;
 
3184
            # perhaps prepare the commit; get the message; then actually commit
3210
3185
            raise errors.BzrCommandError("No changes to commit."
3211
3186
                              " Use --unchanged to commit anyhow.")
3212
3187
        except ConflictsInTree:
3610
3585
                raise errors.BzrCommandError("subunit not available. subunit "
3611
3586
                    "needs to be installed to use --subunit.")
3612
3587
            self.additional_selftest_args['runner_class'] = SubUnitBzrRunner
3613
 
            # On Windows, disable automatic conversion of '\n' to '\r\n' in
3614
 
            # stdout, which would corrupt the subunit stream. 
3615
 
            if sys.platform == "win32" and sys.stdout.fileno() >= 0:
3616
 
                import msvcrt
3617
 
                msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
3618
3588
        if parallel:
3619
3589
            self.additional_selftest_args.setdefault(
3620
3590
                'suite_decorators', []).append(parallel)
4217
4187
    def run(self, revision=None, no_backup=False, file_list=None,
4218
4188
            forget_merges=None):
4219
4189
        tree, file_list = tree_files(file_list)
4220
 
        tree.lock_tree_write()
 
4190
        tree.lock_write()
4221
4191
        self.add_cleanup(tree.unlock)
4222
4192
        if forget_merges:
4223
4193
            tree.set_parent_ids(tree.get_parent_ids()[:1])
4360
4330
            restrict = 'remote'
4361
4331
 
4362
4332
        local_branch = Branch.open_containing(u".")[0]
4363
 
        local_branch.lock_read()
4364
 
        self.add_cleanup(local_branch.unlock)
4365
 
 
4366
4333
        parent = local_branch.get_parent()
4367
4334
        if other_branch is None:
4368
4335
            other_branch = parent
4377
4344
        remote_branch = Branch.open(other_branch)
4378
4345
        if remote_branch.base == local_branch.base:
4379
4346
            remote_branch = local_branch
4380
 
        else:
4381
 
            remote_branch.lock_read()
4382
 
            self.add_cleanup(remote_branch.unlock)
4383
4347
 
 
4348
        local_branch.lock_read()
 
4349
        self.add_cleanup(local_branch.unlock)
4384
4350
        local_revid_range = _revision_range_to_revid_range(
4385
4351
            _get_revision_range(my_revision, local_branch,
4386
4352
                self.name()))
4387
4353
 
 
4354
        remote_branch.lock_read()
 
4355
        self.add_cleanup(remote_branch.unlock)
4388
4356
        remote_revid_range = _revision_range_to_revid_range(
4389
4357
            _get_revision_range(revision,
4390
4358
                remote_branch, self.name()))
4449
4417
 
4450
4418
 
4451
4419
class cmd_pack(Command):
4452
 
    __doc__ = """Compress the data within a repository.
4453
 
 
4454
 
    This operation compresses the data within a bazaar repository. As
4455
 
    bazaar supports automatic packing of repository, this operation is
4456
 
    normally not required to be done manually.
4457
 
 
4458
 
    During the pack operation, bazaar takes a backup of existing repository
4459
 
    data, i.e. pack files. This backup is eventually removed by bazaar
4460
 
    automatically when it is safe to do so. To save disk space by removing
4461
 
    the backed up pack files, the --clean-obsolete-packs option may be
4462
 
    used.
4463
 
 
4464
 
    Warning: If you use --clean-obsolete-packs and your machine crashes
4465
 
    during or immediately after repacking, you may be left with a state
4466
 
    where the deletion has been written to disk but the new packs have not
4467
 
    been. In this case the repository may be unusable.
4468
 
    """
 
4420
    __doc__ = """Compress the data within a repository."""
4469
4421
 
4470
4422
    _see_also = ['repositories']
4471
4423
    takes_args = ['branch_or_repo?']
4472
 
    takes_options = [
4473
 
        Option('clean-obsolete-packs', 'Delete obsolete packs to save disk space.'),
4474
 
        ]
4475
4424
 
4476
 
    def run(self, branch_or_repo='.', clean_obsolete_packs=False):
 
4425
    def run(self, branch_or_repo='.'):
4477
4426
        dir = bzrdir.BzrDir.open_containing(branch_or_repo)[0]
4478
4427
        try:
4479
4428
            branch = dir.open_branch()
4480
4429
            repository = branch.repository
4481
4430
        except errors.NotBranchError:
4482
4431
            repository = dir.open_repository()
4483
 
        repository.pack(clean_obsolete_packs=clean_obsolete_packs)
 
4432
        repository.pack()
4484
4433
 
4485
4434
 
4486
4435
class cmd_plugins(Command):
4681
4630
 
4682
4631
class cmd_bind(Command):
4683
4632
    __doc__ = """Convert the current branch into a checkout of the supplied branch.
4684
 
    If no branch is supplied, rebind to the last bound location.
4685
4633
 
4686
4634
    Once converted into a checkout, commits must succeed on the master branch
4687
4635
    before they will be applied to the local branch.