/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/branch.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-01-14 00:01:32 UTC
  • mfrom: (4957.1.1 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20100114000132-3p3rabnonjw3gzqb
(jam) Merge bzr.stable, bringing in bug fixes #175839, #504390

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
    )
47
47
""")
48
48
 
49
 
from bzrlib.decorators import needs_read_lock, needs_write_lock
 
49
from bzrlib.decorators import needs_read_lock, needs_write_lock, only_raises
50
50
from bzrlib.hooks import HookPoint, Hooks
51
51
from bzrlib.inter import InterObject
 
52
from bzrlib.lock import _RelockDebugMixin
52
53
from bzrlib import registry
53
54
from bzrlib.symbol_versioning import (
54
55
    deprecated_in,
502
503
                left_parent = stop_rev.parent_ids[0]
503
504
            else:
504
505
                left_parent = _mod_revision.NULL_REVISION
 
506
            # left_parent is the actual revision we want to stop logging at,
 
507
            # since we want to show the merged revisions after the stop_rev too
 
508
            reached_stop_revision_id = False
 
509
            revision_id_whitelist = []
505
510
            for node in rev_iter:
506
511
                rev_id = node.key[-1]
507
512
                if rev_id == left_parent:
 
513
                    # reached the left parent after the stop_revision
508
514
                    return
509
 
                yield (rev_id, node.merge_depth, node.revno,
 
515
                if (not reached_stop_revision_id or
 
516
                        rev_id in revision_id_whitelist):
 
517
                    yield (rev_id, node.merge_depth, node.revno,
510
518
                       node.end_of_merge)
 
519
                    if reached_stop_revision_id or rev_id == stop_revision_id:
 
520
                        # only do the merged revs of rev_id from now on
 
521
                        rev = self.repository.get_revision(rev_id)
 
522
                        if rev.parent_ids:
 
523
                            reached_stop_revision_id = True
 
524
                            revision_id_whitelist.extend(rev.parent_ids)
511
525
        else:
512
526
            raise ValueError('invalid stop_rule %r' % stop_rule)
513
527
 
1089
1103
        params = ChangeBranchTipParams(
1090
1104
            self, old_revno, new_revno, old_revid, new_revid)
1091
1105
        for hook in hooks:
1092
 
            try:
1093
 
                hook(params)
1094
 
            except errors.TipChangeRejected:
1095
 
                raise
1096
 
            except Exception:
1097
 
                exc_info = sys.exc_info()
1098
 
                hook_name = Branch.hooks.get_hook_name(hook)
1099
 
                raise errors.HookFailed(
1100
 
                    'pre_change_branch_tip', hook_name, exc_info)
 
1106
            hook(params)
1101
1107
 
1102
1108
    @needs_write_lock
1103
1109
    def update(self):
1432
1438
        """Return the format for the branch object in a_bzrdir."""
1433
1439
        try:
1434
1440
            transport = a_bzrdir.get_branch_transport(None)
1435
 
            format_string = transport.get("format").read()
 
1441
            format_string = transport.get_bytes("format")
1436
1442
            return klass._formats[format_string]
1437
1443
        except errors.NoSuchFile:
1438
1444
            raise errors.NotBranchError(path=transport.base)
1971
1977
    def get_reference(self, a_bzrdir):
1972
1978
        """See BranchFormat.get_reference()."""
1973
1979
        transport = a_bzrdir.get_branch_transport(None)
1974
 
        return transport.get('location').read()
 
1980
        return transport.get_bytes('location')
1975
1981
 
1976
1982
    def set_reference(self, a_bzrdir, to_branch):
1977
1983
        """See BranchFormat.set_reference()."""
2072
2078
    _legacy_formats[0].network_name(), _legacy_formats[0].__class__)
2073
2079
 
2074
2080
 
2075
 
class BzrBranch(Branch):
 
2081
class BzrBranch(Branch, _RelockDebugMixin):
2076
2082
    """A branch stored in the actual filesystem.
2077
2083
 
2078
2084
    Note that it's "local" in the context of the filesystem; it doesn't
2124
2130
        return self.control_files.is_locked()
2125
2131
 
2126
2132
    def lock_write(self, token=None):
 
2133
        if not self.is_locked():
 
2134
            self._note_lock('w')
2127
2135
        # All-in-one needs to always unlock/lock.
2128
2136
        repo_control = getattr(self.repository, 'control_files', None)
2129
2137
        if self.control_files == repo_control or not self.is_locked():
 
2138
            self.repository._warn_if_deprecated(self)
2130
2139
            self.repository.lock_write()
2131
2140
            took_lock = True
2132
2141
        else:
2139
2148
            raise
2140
2149
 
2141
2150
    def lock_read(self):
 
2151
        if not self.is_locked():
 
2152
            self._note_lock('r')
2142
2153
        # All-in-one needs to always unlock/lock.
2143
2154
        repo_control = getattr(self.repository, 'control_files', None)
2144
2155
        if self.control_files == repo_control or not self.is_locked():
 
2156
            self.repository._warn_if_deprecated(self)
2145
2157
            self.repository.lock_read()
2146
2158
            took_lock = True
2147
2159
        else:
2153
2165
                self.repository.unlock()
2154
2166
            raise
2155
2167
 
 
2168
    @only_raises(errors.LockNotHeld, errors.LockBroken)
2156
2169
    def unlock(self):
2157
2170
        try:
2158
2171
            self.control_files.unlock()