/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.3 by Vincent Ladeuil
Fix assertEquals being deprecated by using assertEqual.
1
# Copyright (C) 2008-2012, 2016 Canonical Ltd
3221.11.3 by Robert Collins
Add missing test script.
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3221.11.3 by Robert Collins
Add missing test script.
16
3537.3.3 by Martin Pool
Rename Branch.set_stacked_on to set_stacked_on_url
17
"""Tests for Branch.get_stacked_on_url and set_stacked_on_url."""
3221.11.3 by Robert Collins
Add missing test script.
18
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
19
from breezy import (
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
20
    branch as _mod_branch,
6472.2.2 by Jelmer Vernooij
Use controldir rather than bzrdir in a couple more places.
21
    controldir,
4332.3.35 by Robert Collins
Fix failing tests.
22
    check,
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
23
    errors,
24
    )
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
25
from breezy.revision import NULL_REVISION
26
from breezy.tests import fixtures, TestNotApplicable, transport_util
27
from breezy.tests.per_branch import TestCaseWithBranch
3221.11.3 by Robert Collins
Add missing test script.
28
29
3928.3.3 by John Arbash Meinel
Change the name of 'old_format_errors' to 'unstackable_format_errors'
30
unstackable_format_errors = (
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
31
    _mod_branch.UnstackableBranchFormat,
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
32
    errors.UnstackableRepositoryFormat,
33
    )
34
35
3221.11.3 by Robert Collins
Add missing test script.
36
class TestStacking(TestCaseWithBranch):
37
3830.3.16 by Martin Pool
Add passing tests for iter_lines_added_or_present in stacked repos
38
    def check_lines_added_or_present(self, stacked_branch, revid):
39
        # similar to a failure seen in bug 288751 by mbp 20081120
40
        stacked_repo = stacked_branch.repository
7356.1.5 by Jelmer Vernooij
Use more ExitStacks.
41
        with stacked_repo.lock_read():
3830.3.16 by Martin Pool
Add passing tests for iter_lines_added_or_present in stacked repos
42
            list(stacked_repo.inventories.iter_lines_added_or_present_in_keys(
7143.15.2 by Jelmer Vernooij
Run autopep8.
43
                [(revid,)]))
3830.3.16 by Martin Pool
Add passing tests for iter_lines_added_or_present in stacked repos
44
3537.3.3 by Martin Pool
Rename Branch.set_stacked_on to set_stacked_on_url
45
    def test_get_set_stacked_on_url(self):
3221.11.3 by Robert Collins
Add missing test script.
46
        # branches must either:
47
        # raise UnstackableBranchFormat or
48
        # raise UnstackableRepositoryFormat or
49
        # permit stacking to be done and then return the stacked location.
50
        branch = self.make_branch('branch')
51
        target = self.make_branch('target')
52
        try:
3537.3.3 by Martin Pool
Rename Branch.set_stacked_on to set_stacked_on_url
53
            branch.set_stacked_on_url(target.base)
3928.3.3 by John Arbash Meinel
Change the name of 'old_format_errors' to 'unstackable_format_errors'
54
        except unstackable_format_errors:
3221.11.3 by Robert Collins
Add missing test script.
55
            # if the set failed, so must the get
7143.15.2 by Jelmer Vernooij
Run autopep8.
56
            self.assertRaises(unstackable_format_errors,
57
                              branch.get_stacked_on_url)
4103.2.3 by Andrew Bennetts
Other tests for good luck.
58
            self.assertFalse(branch._format.supports_stacking())
3221.11.3 by Robert Collins
Add missing test script.
59
            return
4103.2.3 by Andrew Bennetts
Other tests for good luck.
60
        self.assertTrue(branch._format.supports_stacking())
3221.11.3 by Robert Collins
Add missing test script.
61
        # now we have a stacked branch:
3537.3.1 by Martin Pool
Rename branch.get_stacked_on to get_stacked_on_url
62
        self.assertEqual(target.base, branch.get_stacked_on_url())
3537.3.3 by Martin Pool
Rename Branch.set_stacked_on to set_stacked_on_url
63
        branch.set_stacked_on_url(None)
3537.3.1 by Martin Pool
Rename branch.get_stacked_on to get_stacked_on_url
64
        self.assertRaises(errors.NotStacked, branch.get_stacked_on_url)
3221.13.2 by Robert Collins
Add a shallow parameter to bzrdir.sprout, which involved fixing a lateny bug in pack to pack fetching with ghost discovery.
65
3242.5.1 by Jonathan Lange
Allow stacked-on branch locations to be stored as relative URLs.
66
    def test_get_set_stacked_on_relative(self):
67
        # Branches can be stacked on other branches using relative paths.
68
        branch = self.make_branch('branch')
69
        target = self.make_branch('target')
70
        try:
3537.3.5 by Martin Pool
merge trunk including stacking policy
71
            branch.set_stacked_on_url('../target')
3928.3.3 by John Arbash Meinel
Change the name of 'old_format_errors' to 'unstackable_format_errors'
72
        except unstackable_format_errors:
3242.5.1 by Jonathan Lange
Allow stacked-on branch locations to be stored as relative URLs.
73
            # if the set failed, so must the get
7143.15.2 by Jelmer Vernooij
Run autopep8.
74
            self.assertRaises(unstackable_format_errors,
75
                              branch.get_stacked_on_url)
3242.5.1 by Jonathan Lange
Allow stacked-on branch locations to be stored as relative URLs.
76
            return
3537.3.5 by Martin Pool
merge trunk including stacking policy
77
        self.assertEqual('../target', branch.get_stacked_on_url())
3242.5.1 by Jonathan Lange
Allow stacked-on branch locations to be stored as relative URLs.
78
4462.3.2 by Robert Collins
Do not stack on the same branch/repository anymore. This was never supported and would generally result in infinite recursion. Fixes bug 376243.
79
    def test_set_stacked_on_same_branch_raises(self):
80
        # Stacking on the same branch silently raises and doesn't execute the
81
        # change. Reported in bug 376243.
82
        branch = self.make_branch('branch')
83
        try:
84
            self.assertRaises(errors.UnstackableLocationError,
7143.15.2 by Jelmer Vernooij
Run autopep8.
85
                              branch.set_stacked_on_url, '../branch')
4462.3.2 by Robert Collins
Do not stack on the same branch/repository anymore. This was never supported and would generally result in infinite recursion. Fixes bug 376243.
86
        except unstackable_format_errors:
87
            # if the set failed, so must the get
7143.15.2 by Jelmer Vernooij
Run autopep8.
88
            self.assertRaises(unstackable_format_errors,
89
                              branch.get_stacked_on_url)
4462.3.2 by Robert Collins
Do not stack on the same branch/repository anymore. This was never supported and would generally result in infinite recursion. Fixes bug 376243.
90
            return
91
        self.assertRaises(errors.NotStacked, branch.get_stacked_on_url)
92
93
    def test_set_stacked_on_same_branch_after_being_stacked_raises(self):
94
        # Stacking on the same branch silently raises and doesn't execute the
95
        # change.
96
        branch = self.make_branch('branch')
97
        target = self.make_branch('target')
98
        try:
99
            branch.set_stacked_on_url('../target')
100
        except unstackable_format_errors:
101
            # if the set failed, so must the get
7143.15.2 by Jelmer Vernooij
Run autopep8.
102
            self.assertRaises(unstackable_format_errors,
103
                              branch.get_stacked_on_url)
4462.3.2 by Robert Collins
Do not stack on the same branch/repository anymore. This was never supported and would generally result in infinite recursion. Fixes bug 376243.
104
            return
105
        self.assertRaises(errors.UnstackableLocationError,
7143.15.2 by Jelmer Vernooij
Run autopep8.
106
                          branch.set_stacked_on_url, '../branch')
4462.3.2 by Robert Collins
Do not stack on the same branch/repository anymore. This was never supported and would generally result in infinite recursion. Fixes bug 376243.
107
        self.assertEqual('../target', branch.get_stacked_on_url())
108
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
109
    def assertRevisionInRepository(self, repo_path, revid):
110
        """Check that a revision is in a repository, disregarding stacking."""
6472.2.2 by Jelmer Vernooij
Use controldir rather than bzrdir in a couple more places.
111
        repo = controldir.ControlDir.open(repo_path).open_repository()
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
112
        self.assertTrue(repo.has_revision(revid))
113
114
    def assertRevisionNotInRepository(self, repo_path, revid):
115
        """Check that a revision is not in a repository, disregarding stacking."""
6472.2.2 by Jelmer Vernooij
Use controldir rather than bzrdir in a couple more places.
116
        repo = controldir.ControlDir.open(repo_path).open_repository()
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
117
        self.assertFalse(repo.has_revision(revid))
118
119
    def test_get_graph_stacked(self):
120
        """A stacked repository shows the graph of its parent."""
121
        trunk_tree = self.make_branch_and_tree('mainline')
122
        trunk_revid = trunk_tree.commit('mainline')
123
        # make a new branch, and stack on the existing one.  we don't use
124
        # sprout(stacked=True) here because if that is buggy and copies data
125
        # it would cause a false pass of this test.
126
        new_branch = self.make_branch('new_branch')
127
        try:
3537.3.3 by Martin Pool
Rename Branch.set_stacked_on to set_stacked_on_url
128
            new_branch.set_stacked_on_url(trunk_tree.branch.base)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
129
        except unstackable_format_errors as e:
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
130
            raise TestNotApplicable(e)
131
        # reading the graph from the stacked branch's repository should see
132
        # data from the stacked-on branch
133
        new_repo = new_branch.repository
7356.1.5 by Jelmer Vernooij
Use more ExitStacks.
134
        with new_repo.lock_read():
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
135
            self.assertEqual(new_repo.get_parent_map([trunk_revid]),
7143.15.2 by Jelmer Vernooij
Run autopep8.
136
                             {trunk_revid: (NULL_REVISION, )})
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
137
138
    def test_sprout_stacked(self):
3221.13.2 by Robert Collins
Add a shallow parameter to bzrdir.sprout, which involved fixing a lateny bug in pack to pack fetching with ghost discovery.
139
        # We have a mainline
140
        trunk_tree = self.make_branch_and_tree('mainline')
141
        trunk_revid = trunk_tree.commit('mainline')
3221.18.4 by Ian Clatworthy
shallow -> stacked
142
        # and make branch from it which is stacked
3221.13.2 by Robert Collins
Add a shallow parameter to bzrdir.sprout, which involved fixing a lateny bug in pack to pack fetching with ghost discovery.
143
        try:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
144
            new_dir = trunk_tree.controldir.sprout('newbranch', stacked=True)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
145
        except unstackable_format_errors as e:
3517.4.12 by Martin Pool
Clearer per-branch-format tests for stacking
146
            raise TestNotApplicable(e)
147
        # stacked repository
148
        self.assertRevisionNotInRepository('newbranch', trunk_revid)
4595.4.4 by Robert Collins
Disable committing directly to stacked branches from lightweight checkouts.
149
        tree = new_dir.open_branch().create_checkout('local')
150
        new_branch_revid = tree.commit('something local')
6182.1.5 by Jelmer Vernooij
Fix more tests.
151
        self.assertRevisionNotInRepository(
152
            trunk_tree.branch.base, new_branch_revid)
3537.3.4 by Martin Pool
Improved branch stacking tests
153
        self.assertRevisionInRepository('newbranch', new_branch_revid)
154
3793.1.2 by Andrew Bennetts
Add test showing that stacking from the smart server works.
155
    def test_sprout_stacked_from_smart_server(self):
156
        # We have a mainline
157
        trunk_tree = self.make_branch_and_tree('mainline')
158
        trunk_revid = trunk_tree.commit('mainline')
159
        # Make sure that we can make a stacked branch from it
160
        try:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
161
            trunk_tree.controldir.sprout('testbranch', stacked=True)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
162
        except unstackable_format_errors as e:
3793.1.2 by Andrew Bennetts
Add test showing that stacking from the smart server works.
163
            raise TestNotApplicable(e)
164
        # Now serve the original mainline from a smart server
165
        remote_transport = self.make_smart_server('mainline')
7143.15.2 by Jelmer Vernooij
Run autopep8.
166
        remote_bzrdir = controldir.ControlDir.open_from_transport(
167
            remote_transport)
3793.1.2 by Andrew Bennetts
Add test showing that stacking from the smart server works.
168
        # and make branch from the smart server which is stacked
169
        new_dir = remote_bzrdir.sprout('newbranch', stacked=True)
170
        # stacked repository
171
        self.assertRevisionNotInRepository('newbranch', trunk_revid)
4595.4.4 by Robert Collins
Disable committing directly to stacked branches from lightweight checkouts.
172
        tree = new_dir.open_branch().create_checkout('local')
173
        new_branch_revid = tree.commit('something local')
6182.1.9 by Jelmer Vernooij
More test fixes.
174
        self.assertRevisionNotInRepository(trunk_tree.branch.user_url,
7143.15.2 by Jelmer Vernooij
Run autopep8.
175
                                           new_branch_revid)
3793.1.2 by Andrew Bennetts
Add test showing that stacking from the smart server works.
176
        self.assertRevisionInRepository('newbranch', new_branch_revid)
177
3537.3.4 by Martin Pool
Improved branch stacking tests
178
    def test_unstack_fetches(self):
179
        """Removing the stacked-on branch pulls across all data"""
5651.5.1 by Andrew Bennetts
Make 'bzr reconfigure --unstacked' fetch tagged revisions too. (#401646)
180
        try:
181
            builder = self.make_branch_builder('trunk')
182
        except errors.UninitializableFormat:
183
            raise TestNotApplicable('uninitializeable format')
3537.3.4 by Martin Pool
Improved branch stacking tests
184
        # We have a mainline
7143.15.2 by Jelmer Vernooij
Run autopep8.
185
        trunk, mainline_revid, rev2 = fixtures.build_branch_with_non_ancestral_rev(
186
            builder)
5651.5.1 by Andrew Bennetts
Make 'bzr reconfigure --unstacked' fetch tagged revisions too. (#401646)
187
        # and make branch from it which is stacked (with no tags)
3537.3.4 by Martin Pool
Improved branch stacking tests
188
        try:
7143.15.2 by Jelmer Vernooij
Run autopep8.
189
            new_dir = trunk.controldir.sprout(
190
                self.get_url('newbranch'), stacked=True)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
191
        except unstackable_format_errors as e:
3537.3.4 by Martin Pool
Improved branch stacking tests
192
            raise TestNotApplicable(e)
193
        # stacked repository
5651.5.1 by Andrew Bennetts
Make 'bzr reconfigure --unstacked' fetch tagged revisions too. (#401646)
194
        self.assertRevisionNotInRepository('newbranch', mainline_revid)
4509.3.17 by Martin Pool
test_unstack_fetches must put the stacked branch on the right transport to test remote formats
195
        # TODO: we'd like to commit in the stacked repository; that requires
196
        # some care (maybe a BranchBuilder) if it's remote and has no
197
        # workingtree
7143.15.2 by Jelmer Vernooij
Run autopep8.
198
        # newbranch_revid = new_dir.open_workingtree().commit('revision in '
199
        # 'newbranch')
3537.3.4 by Martin Pool
Improved branch stacking tests
200
        # now when we unstack that should implicitly fetch, to make sure that
201
        # the branch will still work
202
        new_branch = new_dir.open_branch()
5651.5.2 by Andrew Bennetts
Simplify new fixture slightly, and other test tweaks.
203
        try:
6747.4.1 by Jelmer Vernooij
Fix remaining tests.
204
            new_branch.tags.set_tag('tag-a', rev2)
5651.5.2 by Andrew Bennetts
Simplify new fixture slightly, and other test tweaks.
205
        except errors.TagsNotSupported:
206
            tags_supported = False
207
        else:
208
            tags_supported = True
3537.3.4 by Martin Pool
Improved branch stacking tests
209
        new_branch.set_stacked_on_url(None)
5651.5.1 by Andrew Bennetts
Make 'bzr reconfigure --unstacked' fetch tagged revisions too. (#401646)
210
        self.assertRevisionInRepository('newbranch', mainline_revid)
3537.3.4 by Martin Pool
Improved branch stacking tests
211
        # of course it's still in the mainline
5651.5.1 by Andrew Bennetts
Make 'bzr reconfigure --unstacked' fetch tagged revisions too. (#401646)
212
        self.assertRevisionInRepository('trunk', mainline_revid)
5651.5.2 by Andrew Bennetts
Simplify new fixture slightly, and other test tweaks.
213
        if tags_supported:
214
            # the tagged revision in trunk is now in newbranch too
6747.4.1 by Jelmer Vernooij
Fix remaining tests.
215
            self.assertRevisionInRepository('newbranch', rev2)
3537.3.4 by Martin Pool
Improved branch stacking tests
216
        # and now we're no longer stacked
5651.5.2 by Andrew Bennetts
Simplify new fixture slightly, and other test tweaks.
217
        self.assertRaises(errors.NotStacked, new_branch.get_stacked_on_url)
3221.13.2 by Robert Collins
Add a shallow parameter to bzrdir.sprout, which involved fixing a lateny bug in pack to pack fetching with ghost discovery.
218
5325.1.4 by Andrew Bennetts
Improve comments.
219
    def test_unstack_already_locked(self):
5325.1.1 by Andrew Bennetts
Add failing test.
220
        """Removing the stacked-on branch with an already write-locked branch
221
        works.
222
223
        This was bug 551525.
224
        """
225
        try:
226
            stacked_bzrdir = self.make_stacked_bzrdir()
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
227
        except unstackable_format_errors as e:
5325.1.1 by Andrew Bennetts
Add failing test.
228
            raise TestNotApplicable(e)
229
        stacked_branch = stacked_bzrdir.open_branch()
230
        stacked_branch.lock_write()
231
        stacked_branch.set_stacked_on_url(None)
232
        stacked_branch.unlock()
233
5325.1.4 by Andrew Bennetts
Improve comments.
234
    def test_unstack_already_multiple_locked(self):
235
        """Unstacking a branch preserves the lock count (even though it
236
        replaces the br.repository object).
237
238
        This is a more extreme variation of test_unstack_already_locked.
239
        """
5325.1.2 by Andrew Bennetts
Add another failing test.
240
        try:
241
            stacked_bzrdir = self.make_stacked_bzrdir()
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
242
        except unstackable_format_errors as e:
5325.1.2 by Andrew Bennetts
Add another failing test.
243
            raise TestNotApplicable(e)
244
        stacked_branch = stacked_bzrdir.open_branch()
245
        stacked_branch.lock_write()
246
        stacked_branch.lock_write()
247
        stacked_branch.lock_write()
248
        stacked_branch.set_stacked_on_url(None)
249
        stacked_branch.unlock()
250
        stacked_branch.unlock()
251
        stacked_branch.unlock()
252
3567.3.4 by Michael Hudson
make test a lot better
253
    def make_stacked_bzrdir(self, in_directory=None):
3567.3.7 by Michael Hudson
better docstring
254
        """Create a stacked branch and return its bzrdir.
3567.3.4 by Michael Hudson
make test a lot better
255
256
        :param in_directory: If not None, create a directory of this
257
            name and create the stacking and stacked-on bzrdirs in
258
            this directory.
259
        """
260
        if in_directory is not None:
261
            self.get_transport().mkdir(in_directory)
262
            prefix = in_directory + '/'
263
        else:
264
            prefix = ''
265
        tree = self.make_branch_and_tree(prefix + 'stacked-on')
3242.3.40 by Aaron Bentley
Turn failing test into KnownFailure
266
        tree.commit('Added foo')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
267
        stacked_bzrdir = tree.branch.controldir.sprout(
5325.1.1 by Andrew Bennetts
Add failing test.
268
            self.get_url(prefix + 'stacked'), tree.branch.last_revision(),
269
            stacked=True)
3242.3.40 by Aaron Bentley
Turn failing test into KnownFailure
270
        return stacked_bzrdir
271
272
    def test_clone_from_stacked_branch_preserve_stacking(self):
3242.3.24 by Aaron Bentley
Fix test failures
273
        # We can clone from the bzrdir of a stacked branch. If
274
        # preserve_stacking is True, the cloned branch is stacked on the
275
        # same branch as the original.
3242.3.21 by Jonathan Lange
Preserve stacking in clone
276
        try:
3567.3.4 by Michael Hudson
make test a lot better
277
            stacked_bzrdir = self.make_stacked_bzrdir()
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
278
        except unstackable_format_errors as e:
3567.3.5 by Michael Hudson
use TestNotApplicable in all the stacking clone() tests.
279
            raise TestNotApplicable(e)
3242.3.24 by Aaron Bentley
Fix test failures
280
        cloned_bzrdir = stacked_bzrdir.clone('cloned', preserve_stacking=True)
3242.3.21 by Jonathan Lange
Preserve stacking in clone
281
        try:
282
            self.assertEqual(
3537.3.5 by Martin Pool
merge trunk including stacking policy
283
                stacked_bzrdir.open_branch().get_stacked_on_url(),
284
                cloned_bzrdir.open_branch().get_stacked_on_url())
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
285
        except unstackable_format_errors as e:
3242.3.21 by Jonathan Lange
Preserve stacking in clone
286
            pass
3242.3.40 by Aaron Bentley
Turn failing test into KnownFailure
287
3567.3.4 by Michael Hudson
make test a lot better
288
    def test_clone_from_branch_stacked_on_relative_url_preserve_stacking(self):
289
        # If a branch's stacked-on url is relative, we can still clone
290
        # from it with preserve_stacking True and get a branch stacked
291
        # on an appropriately adjusted relative url.
3567.3.3 by Michael Hudson
very hackish test
292
        try:
3567.3.4 by Michael Hudson
make test a lot better
293
            stacked_bzrdir = self.make_stacked_bzrdir(in_directory='dir')
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
294
        except unstackable_format_errors as e:
3567.3.5 by Michael Hudson
use TestNotApplicable in all the stacking clone() tests.
295
            raise TestNotApplicable(e)
3567.3.4 by Michael Hudson
make test a lot better
296
        stacked_bzrdir.open_branch().set_stacked_on_url('../stacked-on')
5325.1.6 by Andrew Bennetts
Fix test_clone_from_branch_stacked_on_relative_url_preserve_stacking failure by making it use get_url so that it tests RemoteBranch* cases the same as others. Also remove some unused imports.
297
        cloned_bzrdir = stacked_bzrdir.clone(
298
            self.get_url('cloned'), preserve_stacking=True)
3567.3.4 by Michael Hudson
make test a lot better
299
        self.assertEqual(
300
            '../dir/stacked-on',
301
            cloned_bzrdir.open_branch().get_stacked_on_url())
3567.3.3 by Michael Hudson
very hackish test
302
3242.3.40 by Aaron Bentley
Turn failing test into KnownFailure
303
    def test_clone_from_stacked_branch_no_preserve_stacking(self):
304
        try:
3567.3.4 by Michael Hudson
make test a lot better
305
            stacked_bzrdir = self.make_stacked_bzrdir()
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
306
        except unstackable_format_errors as e:
3242.3.40 by Aaron Bentley
Turn failing test into KnownFailure
307
            # not a testable combination.
3567.3.5 by Michael Hudson
use TestNotApplicable in all the stacking clone() tests.
308
            raise TestNotApplicable(e)
1551.19.46 by Aaron Bentley
Fix fetch from stacked respositories (#248506)
309
        cloned_unstacked_bzrdir = stacked_bzrdir.clone('cloned-unstacked',
7143.15.2 by Jelmer Vernooij
Run autopep8.
310
                                                       preserve_stacking=False)
3242.3.24 by Aaron Bentley
Fix test failures
311
        unstacked_branch = cloned_unstacked_bzrdir.open_branch()
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
312
        self.assertRaises((errors.NotStacked, _mod_branch.UnstackableBranchFormat),
3537.3.5 by Martin Pool
merge trunk including stacking policy
313
                          unstacked_branch.get_stacked_on_url)
3242.3.37 by Aaron Bentley
Updates from reviews
314
315
    def test_no_op_preserve_stacking(self):
316
        """With no stacking, preserve_stacking should be a no-op."""
317
        branch = self.make_branch('source')
7143.15.2 by Jelmer Vernooij
Run autopep8.
318
        cloned_bzrdir = branch.controldir.clone(
319
            'cloned', preserve_stacking=True)
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
320
        self.assertRaises((errors.NotStacked, _mod_branch.UnstackableBranchFormat),
3537.3.5 by Martin Pool
merge trunk including stacking policy
321
                          cloned_bzrdir.open_branch().get_stacked_on_url)
3242.3.37 by Aaron Bentley
Updates from reviews
322
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
323
    def make_stacked_on_matching(self, source):
324
        if source.repository.supports_rich_root():
325
            if source.repository._format.supports_chks:
326
                format = "2a"
327
            else:
328
                format = "1.9-rich-root"
329
        else:
330
            format = "1.9"
331
        return self.make_branch('stack-on', format)
332
3242.3.37 by Aaron Bentley
Updates from reviews
333
    def test_sprout_stacking_policy_handling(self):
334
        """Obey policy where possible, ignore otherwise."""
5673.1.3 by Jelmer Vernooij
Change flexible_components to fixed_components.
335
        if self.bzrdir_format.fixed_components:
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
336
            raise TestNotApplicable('Branch format 4 does not autoupgrade.')
337
        source = self.make_branch('source')
338
        stack_on = self.make_stacked_on_matching(source)
6653.6.5 by Jelmer Vernooij
Rename make_bzrdir to make_controldir.
339
        parent_bzrdir = self.make_controldir('.', format='default')
3242.3.37 by Aaron Bentley
Updates from reviews
340
        parent_bzrdir.get_config().set_default_stack_on('stack-on')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
341
        target = source.controldir.sprout('target').open_branch()
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
342
        # When we sprout we upgrade the branch when there is a default stack_on
343
        # set by a config *and* the targeted branch supports stacking.
344
        if stack_on._format.supports_stacking():
3641.1.1 by John Arbash Meinel
Merge in 1.6rc5 and revert disabling default stack on policy
345
            self.assertEqual('../stack-on', target.get_stacked_on_url())
4103.2.1 by Andrew Bennetts
Make clone/sprout stacking policy tests a little more precise.
346
        else:
347
            self.assertRaises(
6734.1.11 by Jelmer Vernooij
Move UnstackableBranchFormat.
348
                branch.UnstackableBranchFormat, target.get_stacked_on_url)
3242.3.38 by Aaron Bentley
Enhance tests
349
350
    def test_clone_stacking_policy_handling(self):
351
        """Obey policy where possible, ignore otherwise."""
5673.1.3 by Jelmer Vernooij
Change flexible_components to fixed_components.
352
        if self.bzrdir_format.fixed_components:
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
353
            raise TestNotApplicable('Branch format 4 does not autoupgrade.')
354
        source = self.make_branch('source')
355
        stack_on = self.make_stacked_on_matching(source)
6653.6.5 by Jelmer Vernooij
Rename make_bzrdir to make_controldir.
356
        parent_bzrdir = self.make_controldir('.', format='default')
3242.3.38 by Aaron Bentley
Enhance tests
357
        parent_bzrdir.get_config().set_default_stack_on('stack-on')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
358
        target = source.controldir.clone('target').open_branch()
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
359
        # When we clone we upgrade the branch when there is a default stack_on
360
        # set by a config *and* the targeted branch supports stacking.
361
        if stack_on._format.supports_stacking():
3641.1.1 by John Arbash Meinel
Merge in 1.6rc5 and revert disabling default stack on policy
362
            self.assertEqual('../stack-on', target.get_stacked_on_url())
4103.2.1 by Andrew Bennetts
Make clone/sprout stacking policy tests a little more precise.
363
        else:
364
            self.assertRaises(
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
365
                _mod_branch.UnstackableBranchFormat, target.get_stacked_on_url)
1551.19.46 by Aaron Bentley
Fix fetch from stacked respositories (#248506)
366
4103.2.3 by Andrew Bennetts
Other tests for good luck.
367
    def test_sprout_to_smart_server_stacking_policy_handling(self):
368
        """Obey policy where possible, ignore otherwise."""
5674.1.1 by Jelmer Vernooij
Add supports_leave_lock flag to BranchFormat and RepositoryFormat.
369
        if not self.branch_format.supports_leaving_lock():
370
            raise TestNotApplicable('Branch format is not usable via HPSS.')
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
371
        source = self.make_branch('source')
372
        stack_on = self.make_stacked_on_matching(source)
6653.6.5 by Jelmer Vernooij
Rename make_bzrdir to make_controldir.
373
        parent_bzrdir = self.make_controldir('.', format='default')
4103.2.3 by Andrew Bennetts
Other tests for good luck.
374
        parent_bzrdir.get_config().set_default_stack_on('stack-on')
375
        url = self.make_smart_server('target').base
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
376
        target = source.controldir.sprout(url).open_branch()
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
377
        # When we sprout we upgrade the branch when there is a default stack_on
378
        # set by a config *and* the targeted branch supports stacking.
379
        if stack_on._format.supports_stacking():
4103.2.3 by Andrew Bennetts
Other tests for good luck.
380
            self.assertEqual('../stack-on', target.get_stacked_on_url())
381
        else:
382
            self.assertRaises(
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
383
                _mod_branch.UnstackableBranchFormat, target.get_stacked_on_url)
4103.2.3 by Andrew Bennetts
Other tests for good luck.
384
1551.19.47 by Aaron Bentley
Add test per JAM
385
    def prepare_stacked_on_fetch(self):
1551.19.46 by Aaron Bentley
Fix fetch from stacked respositories (#248506)
386
        stack_on = self.make_branch_and_tree('stack-on')
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
387
        rev1 = stack_on.commit('first commit')
1551.19.46 by Aaron Bentley
Fix fetch from stacked respositories (#248506)
388
        try:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
389
            stacked_dir = stack_on.controldir.sprout('stacked', stacked=True)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
390
        except unstackable_format_errors as e:
1551.19.46 by Aaron Bentley
Fix fetch from stacked respositories (#248506)
391
            raise TestNotApplicable('Format does not support stacking.')
392
        unstacked = self.make_repository('unstacked')
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
393
        return stacked_dir.open_workingtree(), unstacked, rev1
1551.19.47 by Aaron Bentley
Add test per JAM
394
395
    def test_fetch_copies_from_stacked_on(self):
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
396
        stacked, unstacked, rev1 = self.prepare_stacked_on_fetch()
397
        unstacked.fetch(stacked.branch.repository, rev1)
398
        unstacked.get_revision(rev1)
1551.19.47 by Aaron Bentley
Add test per JAM
399
400
    def test_fetch_copies_from_stacked_on_and_stacked(self):
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
401
        stacked, unstacked, rev1 = self.prepare_stacked_on_fetch()
4595.4.4 by Robert Collins
Disable committing directly to stacked branches from lightweight checkouts.
402
        tree = stacked.branch.create_checkout('local')
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
403
        rev2 = tree.commit('second commit')
404
        unstacked.fetch(stacked.branch.repository, rev2)
405
        unstacked.get_revision(rev1)
406
        unstacked.get_revision(rev2)
407
        self.check_lines_added_or_present(stacked.branch, rev1)
408
        self.check_lines_added_or_present(stacked.branch, rev2)
3582.2.1 by Jonathan Lange
Fix up problems with fetching revisions. Almost entirely abentley's work.
409
3582.1.8 by Martin Pool
Add test for repeated commits into packed repository
410
    def test_autopack_when_stacked(self):
411
        # in bzr.dev as of 20080730, autopack was reported to fail in stacked
412
        # repositories because of problems with text deltas spanning physical
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
413
        # repository boundaries.  however, i didn't actually get this test to
414
        # fail on that code. -- mbp
3582.1.11 by Martin Pool
doc
415
        # see https://bugs.launchpad.net/bzr/+bug/252821
4617.3.1 by Robert Collins
Fix test_stacking tests for 2a as a default format. The change to 2a exposed some actual bugs, both in tests and bzrdir/branch code.
416
        stack_on = self.make_branch_and_tree('stack-on')
417
        if not stack_on.branch._format.supports_stacking():
3582.1.8 by Martin Pool
Add test for repeated commits into packed repository
418
            raise TestNotApplicable("%r does not support stacking"
7143.15.2 by Jelmer Vernooij
Run autopep8.
419
                                    % self.branch_format)
6855.4.1 by Jelmer Vernooij
Yet more bees.
420
        text_lines = [b'line %d blah blah blah\n' % i for i in range(20)]
421
        self.build_tree_contents([('stack-on/a', b''.join(text_lines))])
3582.1.8 by Martin Pool
Add test for repeated commits into packed repository
422
        stack_on.add('a')
423
        stack_on.commit('base commit')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
424
        stacked_dir = stack_on.controldir.sprout('stacked', stacked=True)
4595.4.4 by Robert Collins
Disable committing directly to stacked branches from lightweight checkouts.
425
        stacked_branch = stacked_dir.open_branch()
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
426
        local_tree = stack_on.controldir.sprout('local').open_workingtree()
3582.1.8 by Martin Pool
Add test for repeated commits into packed repository
427
        for i in range(20):
6855.4.1 by Jelmer Vernooij
Yet more bees.
428
            text_lines[0] = b'changed in %d\n' % i
429
            self.build_tree_contents([('local/a', b''.join(text_lines))])
4595.4.4 by Robert Collins
Disable committing directly to stacked branches from lightweight checkouts.
430
            local_tree.commit('commit %d' % i)
431
            local_tree.branch.push(stacked_branch)
432
        stacked_branch.repository.pack()
433
        check.check_dwim(stacked_branch.base, False, True, True)
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
434
435
    def test_pull_delta_when_stacked(self):
436
        if not self.branch_format.supports_stacking():
437
            raise TestNotApplicable("%r does not support stacking"
7143.15.2 by Jelmer Vernooij
Run autopep8.
438
                                    % self.branch_format)
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
439
        stack_on = self.make_branch_and_tree('stack-on')
6855.4.1 by Jelmer Vernooij
Yet more bees.
440
        text_lines = [b'line %d blah blah blah\n' % i for i in range(20)]
441
        self.build_tree_contents([('stack-on/a', b''.join(text_lines))])
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
442
        stack_on.add('a')
443
        stack_on.commit('base commit')
444
        # make a stacked branch from the mainline
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
445
        stacked_dir = stack_on.controldir.sprout('stacked', stacked=True)
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
446
        stacked_tree = stacked_dir.open_workingtree()
447
        # make a second non-stacked branch from the mainline
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
448
        other_dir = stack_on.controldir.sprout('other')
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
449
        other_tree = other_dir.open_workingtree()
6855.4.1 by Jelmer Vernooij
Yet more bees.
450
        text_lines[9] = b'changed in other\n'
451
        self.build_tree_contents([('other/a', b''.join(text_lines))])
3830.3.16 by Martin Pool
Add passing tests for iter_lines_added_or_present in stacked repos
452
        stacked_revid = other_tree.commit('commit in other')
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
453
        # this should have generated a delta; try to pull that across
3582.1.15 by Martin Pool
Comments and tests for repository stacking
454
        # bug 252821 caused a RevisionNotPresent here...
455
        stacked_tree.pull(other_tree.branch)
3582.1.10 by Martin Pool
Add failing tets for pull into stacked repository
456
        stacked_tree.branch.repository.pack()
4332.3.35 by Robert Collins
Fix failing tests.
457
        check.check_dwim(stacked_tree.branch.base, False, True, True)
3830.3.16 by Martin Pool
Add passing tests for iter_lines_added_or_present in stacked repos
458
        self.check_lines_added_or_present(stacked_tree.branch, stacked_revid)
3582.1.12 by Martin Pool
merge from trunk
459
3582.2.1 by Jonathan Lange
Fix up problems with fetching revisions. Almost entirely abentley's work.
460
    def test_fetch_revisions_with_file_changes(self):
461
        # Fetching revisions including file changes into a stacked branch
462
        # works without error.
463
        # Make the source tree.
464
        src_tree = self.make_branch_and_tree('src')
6855.4.1 by Jelmer Vernooij
Yet more bees.
465
        self.build_tree_contents([('src/a', b'content')])
3582.2.1 by Jonathan Lange
Fix up problems with fetching revisions. Almost entirely abentley's work.
466
        src_tree.add('a')
467
        src_tree.commit('first commit')
468
469
        # Make the stacked-on branch.
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
470
        src_tree.controldir.sprout('stacked-on')
3582.2.1 by Jonathan Lange
Fix up problems with fetching revisions. Almost entirely abentley's work.
471
472
        # Make a branch stacked on it.
473
        target = self.make_branch('target')
474
        try:
475
            target.set_stacked_on_url('../stacked-on')
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
476
        except unstackable_format_errors as e:
3582.2.1 by Jonathan Lange
Fix up problems with fetching revisions. Almost entirely abentley's work.
477
            raise TestNotApplicable('Format does not support stacking.')
478
479
        # Change the source branch.
6855.4.1 by Jelmer Vernooij
Yet more bees.
480
        self.build_tree_contents([('src/a', b'new content')])
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
481
        rev2 = src_tree.commit('second commit')
3582.2.1 by Jonathan Lange
Fix up problems with fetching revisions. Almost entirely abentley's work.
482
483
        # Fetch changes to the target.
484
        target.fetch(src_tree.branch)
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
485
        rtree = target.repository.revision_tree(rev2)
3582.2.1 by Jonathan Lange
Fix up problems with fetching revisions. Almost entirely abentley's work.
486
        rtree.lock_read()
487
        self.addCleanup(rtree.unlock)
6973.7.3 by Jelmer Vernooij
Fix some more tests.
488
        self.assertEqual(b'new content', rtree.get_file_text('a'))
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
489
        self.check_lines_added_or_present(target, rev2)
3770.2.1 by Michael Hudson
test and feature
490
491
    def test_transform_fallback_location_hook(self):
492
        # The 'transform_fallback_location' branch hook allows us to inspect
493
        # and transform the URL of the fallback location for the branch.
494
        stack_on = self.make_branch('stack-on')
495
        stacked = self.make_branch('stacked')
496
        try:
497
            stacked.set_stacked_on_url('../stack-on')
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
498
        except unstackable_format_errors as e:
3770.2.1 by Michael Hudson
test and feature
499
            raise TestNotApplicable('Format does not support stacking.')
500
        self.get_transport().rename('stack-on', 'new-stack-on')
501
        hook_calls = []
7143.15.2 by Jelmer Vernooij
Run autopep8.
502
3770.2.1 by Michael Hudson
test and feature
503
        def hook(stacked_branch, url):
504
            hook_calls.append(url)
505
            return '../new-stack-on'
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
506
        _mod_branch.Branch.hooks.install_named_hook(
3770.2.1 by Michael Hudson
test and feature
507
            'transform_fallback_location', hook, None)
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
508
        _mod_branch.Branch.open('stacked')
3770.2.1 by Michael Hudson
test and feature
509
        self.assertEqual(['../stack-on'], hook_calls)
3830.2.1 by Aaron Bentley
Fix HPSS with branch stacked on repository branch
510
511
    def test_stack_on_repository_branch(self):
512
        # Stacking should work when the repo isn't co-located with the
513
        # stack-on branch.
514
        try:
515
            repo = self.make_repository('repo', shared=True)
516
        except errors.IncompatibleFormat:
517
            raise TestNotApplicable()
6145.2.1 by Jelmer Vernooij
Add RepositoryFormat.supports_nesting_repositories.
518
        if not repo._format.supports_nesting_repositories:
519
            raise TestNotApplicable()
3830.2.1 by Aaron Bentley
Fix HPSS with branch stacked on repository branch
520
        # Avoid make_branch, which produces standalone branches.
6653.6.5 by Jelmer Vernooij
Rename make_bzrdir to make_controldir.
521
        bzrdir = self.make_controldir('repo/stack-on')
3834.5.4 by John Arbash Meinel
Skip the stack_on_repository test for BranchReference branches.
522
        try:
523
            b = bzrdir.create_branch()
524
        except errors.UninitializableFormat:
525
            raise TestNotApplicable()
3830.2.1 by Aaron Bentley
Fix HPSS with branch stacked on repository branch
526
        transport = self.get_transport('stacked')
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
527
        b.controldir.clone_on_transport(transport, stacked_on=b.base)
3830.2.2 by Aaron Bentley
Add explanatory comment.
528
        # Ensure that opening the branch doesn't raise.
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
529
        _mod_branch.Branch.open(transport.base)
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
530
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
531
    def test_revision_history_of_stacked(self):
4419.1.6 by Andrew Bennetts
Add comments requested by Martin's review.
532
        # See <https://launchpad.net/bugs/380314>.
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
533
        stack_on = self.make_branch_and_tree('stack-on')
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
534
        rev1 = stack_on.commit('first commit')
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
535
        try:
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
536
            stacked_dir = stack_on.controldir.sprout(
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
537
                self.get_url('stacked'), stacked=True)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
538
        except unstackable_format_errors as e:
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
539
            raise TestNotApplicable('Format does not support stacking.')
540
        try:
541
            stacked = stacked_dir.open_workingtree()
542
        except errors.NoWorkingTree:
543
            stacked = stacked_dir.open_branch().create_checkout(
544
                'stacked-checkout', lightweight=True)
4595.4.4 by Robert Collins
Disable committing directly to stacked branches from lightweight checkouts.
545
        tree = stacked.branch.create_checkout('local')
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
546
        rev2 = tree.commit('second commit')
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
547
        # Sanity check: stacked's repo should not contain rev1, otherwise this
548
        # test isn't testing what it's supposed to.
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
549
        repo = stacked.branch.repository.controldir.open_repository()
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
550
        repo.lock_read()
551
        self.addCleanup(repo.unlock)
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
552
        self.assertEqual({}, repo.get_parent_map([rev1]))
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
553
        # revision_history should work, even though the history is spread over
554
        # multiple repositories.
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
555
        self.assertEqual((2, rev2), stacked.branch.last_revision_info())
4419.1.2 by Andrew Bennetts
Add branch_implementations test for revision_history() on a stacked branch.
556
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
557
558
class TestStackingConnections(
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
559
        transport_util.TestCaseWithConnectionHookedTransport):
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
560
561
    def setUp(self):
562
        super(TestStackingConnections, self).setUp()
563
        try:
564
            base_tree = self.make_branch_and_tree('base',
565
                                                  format=self.bzrdir_format)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
566
        except errors.UninitializableFormat as e:
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
567
            raise TestNotApplicable(e)
568
        stacked = self.make_branch('stacked', format=self.bzrdir_format)
569
        try:
570
            stacked.set_stacked_on_url(base_tree.branch.base)
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
571
        except unstackable_format_errors as e:
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
572
            raise TestNotApplicable(e)
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
573
        self.rev_base = base_tree.commit('first')
574
        stacked.set_last_revision_info(1, self.rev_base)
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
575
        stacked_relative = self.make_branch('stacked_relative',
576
                                            format=self.bzrdir_format)
6182.1.12 by Jelmer Vernooij
Fix two more tests.
577
        stacked_relative.set_stacked_on_url(base_tree.branch.user_url)
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
578
        stacked.set_last_revision_info(1, self.rev_base)
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
579
        self.start_logging_connections()
580
581
    def test_open_stacked(self):
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
582
        b = _mod_branch.Branch.open(self.get_url('stacked'))
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
583
        rev = b.repository.get_revision(self.rev_base)
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
584
        self.assertEqual(1, len(self.connections))
585
586
    def test_open_stacked_relative(self):
6743 by Jelmer Vernooij
Merge lp:~jelmer/brz/move-errors-more.
587
        b = _mod_branch.Branch.open(self.get_url('stacked_relative'))
6747.3.1 by Jelmer Vernooij
Avoid more uses of revision_id.
588
        rev = b.repository.get_revision(self.rev_base)
3928.3.1 by John Arbash Meinel
Fix Branch.open() so that for stacked branches we don't open multiple connections.
589
        self.assertEqual(1, len(self.connections))