/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
1
# Copyright (C) 2010 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
6379.6.7 by Jelmer Vernooij
Move importing from future until after doc string, otherwise the doc string will disappear.
17
"""Weave-era branch implementations."""
18
6379.6.3 by Jelmer Vernooij
Use absolute_import.
19
from __future__ import absolute_import
20
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
21
from ... import (
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
22
    errors,
23
    lockable_files,
24
    )
25
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
26
from ...decorators import (
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
27
    needs_read_lock,
28
    needs_write_lock,
29
    only_raises,
30
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
31
from ...lock import LogicalLockResult
32
from ...trace import mutter
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
33
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
34
from ...branch import (
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
35
    BranchFormat,
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
36
    BranchWriteLockResult,
6517.1.2 by Jelmer Vernooij
Move BzrBranchFormat5 into a separate file.
37
    )
6670.4.1 by Jelmer Vernooij
Update imports.
38
from ...bzr.fullhistory import (
5718.8.1 by Jelmer Vernooij
Add FullHistoryBzrBranch.
39
    FullHistoryBzrBranch,
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
40
    )
41
42
5718.8.1 by Jelmer Vernooij
Add FullHistoryBzrBranch.
43
class BzrBranch4(FullHistoryBzrBranch):
5718.8.2 by Jelmer Vernooij
Split out full history branch code.
44
    """Branch format 4."""
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
45
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
46
    def lock_write(self, token=None):
47
        """Lock the branch for write operations.
48
49
        :param token: A token to permit reacquiring a previously held and
50
            preserved lock.
51
        :return: A BranchWriteLockResult.
52
        """
53
        if not self.is_locked():
54
            self._note_lock('w')
6531.2.4 by Vincent Ladeuil
Always means always. Full test suite revealed a possible further simplication.
55
        # All-in-one needs to always unlock/lock.
56
        self.repository._warn_if_deprecated(self)
57
        self.repository.lock_write()
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
58
        try:
59
            return BranchWriteLockResult(self.unlock,
60
                self.control_files.lock_write(token=token))
61
        except:
6531.2.4 by Vincent Ladeuil
Always means always. Full test suite revealed a possible further simplication.
62
            self.repository.unlock()
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
63
            raise
64
65
    def lock_read(self):
66
        """Lock the branch for read operations.
67
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
68
        :return: A breezy.lock.LogicalLockResult.
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
69
        """
70
        if not self.is_locked():
71
            self._note_lock('r')
6531.2.4 by Vincent Ladeuil
Always means always. Full test suite revealed a possible further simplication.
72
        # All-in-one needs to always unlock/lock.
73
        self.repository._warn_if_deprecated(self)
74
        self.repository.lock_read()
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
75
        try:
76
            self.control_files.lock_read()
77
            return LogicalLockResult(self.unlock)
78
        except:
6531.2.4 by Vincent Ladeuil
Always means always. Full test suite revealed a possible further simplication.
79
            self.repository.unlock()
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
80
            raise
81
82
    @only_raises(errors.LockNotHeld, errors.LockBroken)
83
    def unlock(self):
84
        if self.control_files._lock_count == 2 and self.conf_store is not None:
85
            self.conf_store.save_changes()
86
        try:
87
            self.control_files.unlock()
88
        finally:
89
            # All-in-one needs to always unlock/lock.
6531.2.2 by Vincent Ladeuil
Better version separating the lock methods between branch and branch format 4 and removing the duplication.
90
            self.repository.unlock()
6531.2.1 by Vincent Ladeuil
Add a failing test and a brain-dead fix (duplicating the existing code).
91
            if not self.control_files.is_locked():
92
                # we just released the lock
93
                self._clear_cached_state()
94
6127.1.9 by Jelmer Vernooij
Add lightweight option to _get_checkout_format().
95
    def _get_checkout_format(self, lightweight=False):
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
96
        """Return the most suitable metadir for a checkout of this branch.
97
        """
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
98
        from .repository import RepositoryFormat7
6670.4.3 by Jelmer Vernooij
Fix more imports.
99
        from ...bzr.bzrdir import BzrDirMetaFormat1
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
100
        format = BzrDirMetaFormat1()
6127.1.11 by Jelmer Vernooij
Fix weave format test.
101
        if lightweight:
102
            format.set_branch_format(self._format)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
103
            format.repository_format = self.controldir._format.repository_format
6127.1.11 by Jelmer Vernooij
Fix weave format test.
104
        else:
105
            format.repository_format = RepositoryFormat7()
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
106
        return format
107
5718.8.2 by Jelmer Vernooij
Split out full history branch code.
108
    def unbind(self):
109
        raise errors.UpgradeRequired(self.user_url)
110
111
    def bind(self, other):
112
        raise errors.UpgradeRequired(self.user_url)
113
114
    def set_bound_location(self, location):
115
        raise NotImplementedError(self.set_bound_location)
116
117
    def get_bound_location(self):
118
        return None
119
120
    def update(self):
121
        return None
122
123
    def get_master_branch(self, possible_transports=None):
124
        return None
125
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
126
127
class BzrBranchFormat4(BranchFormat):
128
    """Bzr branch format 4.
129
130
    This format has:
131
     - a revision-history file.
132
     - a branch-lock lock file [ to be shared with the bzrdir ]
5718.8.2 by Jelmer Vernooij
Split out full history branch code.
133
134
    It does not support binding.
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
135
    """
136
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
137
    def initialize(self, a_controldir, name=None, repository=None,
6123.9.12 by Jelmer Vernooij
Add append_revisions_only argument to BranchFormat.initialize.
138
                   append_revisions_only=None):
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
139
        """Create a branch of this format in a_controldir.
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
140
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
141
        :param a_controldir: The bzrdir to initialize the branch in
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
142
        :param name: Name of colocated branch to create, if any
5705.2.1 by Jelmer Vernooij
Inline _initialize_helper.
143
        :param repository: Repository for this branch (unused)
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
144
        """
6123.9.12 by Jelmer Vernooij
Add append_revisions_only argument to BranchFormat.initialize.
145
        if append_revisions_only:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
146
            raise errors.UpgradeRequired(a_controldir.user_url)
5705.2.1 by Jelmer Vernooij
Inline _initialize_helper.
147
        if repository is not None:
148
            raise NotImplementedError(
149
                "initialize(repository=<not None>) on %r" % (self,))
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
150
        if not [isinstance(a_controldir._format, format) for format in
5705.2.2 by Jelmer Vernooij
Only support BzrBranchFormat4 in pre-metadir bzr dirs.
151
                self._compatible_bzrdirs]:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
152
            raise errors.IncompatibleFormat(self, a_controldir._format)
5705.2.1 by Jelmer Vernooij
Inline _initialize_helper.
153
        utf8_files = [('revision-history', ''),
154
                      ('branch-name', ''),
155
                      ]
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
156
        mutter('creating branch %r in %s', self, a_controldir.user_url)
157
        branch_transport = a_controldir.get_branch_transport(self, name=name)
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
158
        control_files = lockable_files.LockableFiles(branch_transport,
159
            'branch-lock', lockable_files.TransportLock)
160
        control_files.create_lock()
161
        try:
162
            control_files.lock_write()
163
        except errors.LockContention:
164
            lock_taken = False
165
        else:
166
            lock_taken = True
167
        try:
168
            for (filename, content) in utf8_files:
169
                branch_transport.put_bytes(
170
                    filename, content,
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
171
                    mode=a_controldir._get_file_mode())
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
172
        finally:
173
            if lock_taken:
174
                control_files.unlock()
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
175
        branch = self.open(a_controldir, name, _found=True,
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
176
                found_repository=None)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
177
        self._run_post_branch_init_hooks(a_controldir, name, branch)
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
178
        return branch
179
180
    def __init__(self):
181
        super(BzrBranchFormat4, self).__init__()
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
182
        from .bzrdir import (
5582.10.87 by Jelmer Vernooij
Merge bzr.dev.
183
            BzrDirFormat4, BzrDirFormat5, BzrDirFormat6,
184
            )
6746.2.1 by Jelmer Vernooij
Rename matchingbzrdir to matchingcontroldir.
185
        self._matchingcontroldir = BzrDirFormat6()
5705.2.2 by Jelmer Vernooij
Only support BzrBranchFormat4 in pre-metadir bzr dirs.
186
        self._compatible_bzrdirs = [BzrDirFormat4, BzrDirFormat5,
187
            BzrDirFormat6]
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
188
189
    def network_name(self):
190
        """The network name for this format is the control dirs disk label."""
6746.2.1 by Jelmer Vernooij
Rename matchingbzrdir to matchingcontroldir.
191
        return self._matchingcontroldir.get_format_string()
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
192
5705.2.4 by Jelmer Vernooij
Add BzrBranchFormat4.get_format_description().
193
    def get_format_description(self):
5705.2.6 by Jelmer Vernooij
Fix case sensitivity.
194
        return "Branch format 4"
5705.2.4 by Jelmer Vernooij
Add BzrBranchFormat4.get_format_description().
195
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
196
    def open(self, a_controldir, name=None, _found=False, ignore_fallbacks=False,
6305.3.3 by Jelmer Vernooij
Fix use of possible_transports.
197
            found_repository=None, possible_transports=None):
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
198
        """See BranchFormat.open()."""
6436.1.2 by Jelmer Vernooij
Fix some tests.
199
        if name is None:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
200
            name = a_controldir._get_selected_branch()
6436.1.2 by Jelmer Vernooij
Fix some tests.
201
        if name != "":
5699.4.8 by Jelmer Vernooij
Properly raise NoColocatedBranchSupport.
202
            raise errors.NoColocatedBranchSupport(self)
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
203
        if not _found:
204
            # we are being called directly and must probe.
205
            raise NotImplementedError
206
        if found_repository is None:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
207
            found_repository = a_controldir.open_repository()
5718.8.1 by Jelmer Vernooij
Add FullHistoryBzrBranch.
208
        return BzrBranch4(_format=self,
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
209
                         _control_files=a_controldir._control_files,
210
                         a_controldir=a_controldir,
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
211
                         name=name,
6305.3.3 by Jelmer Vernooij
Fix use of possible_transports.
212
                         _repository=found_repository,
213
                         possible_transports=possible_transports)
5697.2.1 by Jelmer Vernooij
Move weave branch to bzrlib.branch_weave.
214
215
    def __str__(self):
216
        return "Bazaar-NG branch format 4"
217
218
    def supports_leaving_lock(self):
219
        return False