/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
1
# Copyright (C) 2005 Robey Pointer <robey@lag.net>, Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
7
#
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
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.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
17
"""Tests for branches bound to an sftp branch."""
18
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
19
20
import os
21
1607.1.13 by Robert Collins
Add a clear_connection_cache to the SFTP transport and use it in fixing the bound branch test speed performance problem which was cause by the server thread timing out - it was blocked on a read and closing the client side causes the server to unblock and exit.
22
import bzrlib
2204.4.13 by Aaron Bentley
Update all test cases to avoid set_default_format
23
from bzrlib import (
24
    bzrdir,
25
    )
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
26
from bzrlib.branch import Branch
27
from bzrlib.bzrdir import (BzrDir,
28
                           BzrDirFormat,
29
                           BzrDirFormat6,
30
                           BzrDirMetaFormat1,
31
                           )
32
import bzrlib.errors as errors
1505.1.30 by John Arbash Meinel
[merge] jam-integration 1495
33
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer, paramiko_loaded
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
34
35
36
class BoundSFTPBranch(TestCaseWithSFTPServer):
37
38
    def create_branches(self):
39
        self.build_tree(['base/', 'base/a', 'base/b'])
2204.4.13 by Aaron Bentley
Update all test cases to avoid set_default_format
40
        format = bzrdir.format_registry.make_bzrdir('knit')
41
        wt_base = BzrDir.create_standalone_workingtree('base',
42
            format=format)
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
43
    
44
        b_base = wt_base.branch
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
45
46
        wt_base.add('a')
47
        wt_base.add('b')
48
        wt_base.commit('first', rev_id='r@b-1')
49
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
50
        wt_child = b_base.bzrdir.sprout('child').open_workingtree()
51
        self.sftp_base = Branch.open(self.get_url('base'))
52
        wt_child.branch.bind(self.sftp_base)
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
53
        # check the branch histories are ready for using in tests.
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
54
        self.assertEqual(['r@b-1'], b_base.revision_history())
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
55
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
56
        return b_base, wt_child
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
57
1607.1.13 by Robert Collins
Add a clear_connection_cache to the SFTP transport and use it in fixing the bound branch test speed performance problem which was cause by the server thread timing out - it was blocked on a read and closing the client side causes the server to unblock and exit.
58
    def tearDown(self):
59
        self.sftp_base = None
60
        bzrlib.transport.sftp.clear_connection_cache()
61
        super(BoundSFTPBranch, self).tearDown()
62
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
63
    def test_simple_binding(self):
64
        self.build_tree(['base/', 'base/a', 'base/b', 'child/'])
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
65
        wt_base = BzrDir.create_standalone_workingtree('base')
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
66
67
        wt_base.add('a')
68
        wt_base.add('b')
69
        wt_base.commit('first', rev_id='r@b-1')
70
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
71
        b_base = wt_base.branch
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
72
        # manually make a branch we can bind, because the default format
73
        # may not be bindable-from, and we want to test the side effects etc
74
        # of bondage.
2204.4.13 by Aaron Bentley
Update all test cases to avoid set_default_format
75
        format = bzrdir.format_registry.make_bzrdir('knit')
76
        b_child = BzrDir.create_branch_convenience('child', format=format)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
77
        self.assertEqual(None, b_child.get_bound_location())
78
        self.assertEqual(None, b_child.get_master_branch())
79
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
80
        sftp_b_base = Branch.open(self.get_url('base'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
81
        b_child.bind(sftp_b_base)
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
82
        self.assertEqual(sftp_b_base.base, b_child.get_bound_location())
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
83
        # the bind must not have given b_child history:
84
        self.assertEqual([], b_child.revision_history())
85
        # we should be able to update the branch at this point:
86
        self.assertEqual(None, b_child.update())
87
        # and now there must be history.
88
        self.assertEqual(['r@b-1'], b_child.revision_history())
89
        # this line is more of a working tree test line, but - what the hey,
90
        # it has work to do.
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
91
        b_child.bzrdir.open_workingtree().update()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
92
        self.failUnlessExists('child/a')
93
        self.failUnlessExists('child/b')
94
95
        b_child.unbind()
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
96
        self.assertEqual(None, b_child.get_bound_location())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
97
98
    def test_bound_commit(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
99
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
100
101
        open('child/a', 'wb').write('new contents\n')
102
        wt_child.commit('modified a', rev_id='r@c-2')
103
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
104
        self.assertEqual(['r@b-1', 'r@c-2'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
105
        self.assertEqual(['r@b-1', 'r@c-2'], b_base.revision_history())
106
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
107
    def test_bound_commit_fails_when_out_of_date(self):
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
108
        # Make sure commit fails if out of date.
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
109
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
110
111
        open('base/a', 'wb').write('new base contents\n')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
112
        b_base.bzrdir.open_workingtree().commit('base', rev_id='r@b-2')
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
113
114
        open('child/b', 'wb').write('new b child contents\n')
115
        self.assertRaises(errors.BoundBranchOutOfDate,
116
                wt_child.commit, 'child', rev_id='r@c-2')
117
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
118
        sftp_b_base = Branch.open(self.get_url('base'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
119
120
        # This is all that cmd_update does
121
        wt_child.pull(sftp_b_base, overwrite=False)
122
123
        wt_child.commit('child', rev_id='r@c-3')
124
125
        self.assertEqual(['r@b-1', 'r@b-2', 'r@c-3'],
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
126
                wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
127
        self.assertEqual(['r@b-1', 'r@b-2', 'r@c-3'],
128
                b_base.revision_history())
129
        self.assertEqual(['r@b-1', 'r@b-2', 'r@c-3'],
130
                sftp_b_base.revision_history())
131
132
    def test_double_binding(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
133
        b_base, wt_child = self.create_branches()
134
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
135
        wt_child2 = wt_child.branch.create_checkout('child2')
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
136
137
        open('child2/a', 'wb').write('new contents\n')
138
        self.assertRaises(errors.CommitToDoubleBoundBranch,
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
139
                wt_child2.commit, 'child2', rev_id='r@d-2')
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
140
141
    def test_unbinding(self):
142
        from bzrlib.transport import get_transport
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
143
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
144
145
        # TestCaseWithSFTPServer only allows you to connect one time
146
        # to the SFTP server. So we have to create a connection and
147
        # keep it around, so that it can be reused
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
148
        __unused_t = get_transport(self.get_url('.'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
149
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
150
        wt_base = b_base.bzrdir.open_workingtree()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
151
        open('base/a', 'wb').write('new base contents\n')
152
        wt_base.commit('base', rev_id='r@b-2')
153
154
        open('child/b', 'wb').write('new b child contents\n')
155
        self.assertRaises(errors.BoundBranchOutOfDate,
156
                wt_child.commit, 'child', rev_id='r@c-2')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
157
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
158
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
159
        wt_child.commit('child', rev_id='r@c-2')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
160
        self.assertEqual(['r@b-1', 'r@c-2'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
161
        self.assertEqual(['r@b-1', 'r@b-2'], b_base.revision_history())
162
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
163
        sftp_b_base = Branch.open(self.get_url('base'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
164
        self.assertRaises(errors.DivergedBranches,
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
165
                wt_child.branch.bind, sftp_b_base)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
166
167
    def test_commit_remote_bound(self):
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
168
        # Make sure it is detected if the current base is bound during the
169
        # objects lifetime, when the child goes to commit.
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
170
        b_base, wt_child = self.create_branches()
171
172
        b_base.bzrdir.sprout('newbase')
173
174
        sftp_b_base = Branch.open(self.get_url('base'))
175
        sftp_b_newbase = Branch.open(self.get_url('newbase'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
176
177
        sftp_b_base.bind(sftp_b_newbase)
178
179
        open('child/a', 'wb').write('new contents\n')
180
        self.assertRaises(errors.CommitToDoubleBoundBranch,
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
181
                wt_child.commit, 'failure', rev_id='r@c-2')
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
182
183
        self.assertEqual(['r@b-1'], b_base.revision_history())
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
184
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
185
        self.assertEqual(['r@b-1'], sftp_b_newbase.revision_history())
186
187
    def test_bind_diverged(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
188
        from bzrlib.builtins import merge
189
190
        b_base, wt_child = self.create_branches()
191
192
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
193
        open('child/a', 'ab').write('child contents\n')
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
194
        wt_child_rev = wt_child.commit('child', rev_id='r@c-2')
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
195
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
196
        self.assertEqual(['r@b-1', 'r@c-2'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
197
        self.assertEqual(['r@b-1'], b_base.revision_history())
198
199
        open('base/b', 'ab').write('base contents\n')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
200
        b_base.bzrdir.open_workingtree().commit('base', rev_id='r@b-2')
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
201
        self.assertEqual(['r@b-1', 'r@b-2'], b_base.revision_history())
202
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
203
        sftp_b_base = Branch.open(self.get_url('base'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
204
205
        self.assertRaises(errors.DivergedBranches,
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
206
                wt_child.branch.bind, sftp_b_base)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
207
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
208
        wt_child.merge_from_branch(sftp_b_base)
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
209
        self.assertEqual([wt_child_rev, 'r@b-2'], wt_child.get_parent_ids())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
210
        wt_child.commit('merged', rev_id='r@c-3')
211
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
212
        # After a merge, trying to bind again should succeed but not push the
213
        # new change.
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
214
        wt_child.branch.bind(sftp_b_base)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
215
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
216
        self.assertEqual(['r@b-1', 'r@b-2'], b_base.revision_history())
217
        self.assertEqual(['r@b-1', 'r@c-2', 'r@c-3'],
218
            wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
219
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
220
    def test_bind_parent_ahead_preserves_parent(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
221
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
222
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
223
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
224
225
        open('a', 'ab').write('base changes\n')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
226
        wt_base = b_base.bzrdir.open_workingtree()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
227
        wt_base.commit('base', rev_id='r@b-2')
228
        self.assertEqual(['r@b-1', 'r@b-2'], b_base.revision_history())
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
229
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
230
231
        sftp_b_base = Branch.open(self.get_url('base'))
232
        wt_child.branch.bind(sftp_b_base)
233
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
234
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
235
236
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
237
238
        # Check and make sure it also works if parent is ahead multiple
239
        wt_base.commit('base 3', rev_id='r@b-3', allow_pointless=True)
240
        wt_base.commit('base 4', rev_id='r@b-4', allow_pointless=True)
241
        wt_base.commit('base 5', rev_id='r@b-5', allow_pointless=True)
242
243
        self.assertEqual(['r@b-1', 'r@b-2', 'r@b-3', 'r@b-4', 'r@b-5'],
244
                b_base.revision_history())
245
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
246
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
247
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
248
        wt_child.branch.bind(sftp_b_base)
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
249
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
250
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
251
    def test_bind_child_ahead_preserves_child(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
252
        b_base, wt_child = self.create_branches()
253
254
        wt_child.branch.unbind()
255
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
256
        wt_child.commit('child', rev_id='r@c-2', allow_pointless=True)
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
257
        self.assertEqual(['r@b-1', 'r@c-2'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
258
        self.assertEqual(['r@b-1'], b_base.revision_history())
259
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
260
        sftp_b_base = Branch.open(self.get_url('base'))
261
        wt_child.branch.bind(sftp_b_base)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
262
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
263
        self.assertEqual(['r@b-1'], b_base.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
264
265
        # Check and make sure it also works if child is ahead multiple
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
266
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
267
        wt_child.commit('child 3', rev_id='r@c-3', allow_pointless=True)
268
        wt_child.commit('child 4', rev_id='r@c-4', allow_pointless=True)
269
        wt_child.commit('child 5', rev_id='r@c-5', allow_pointless=True)
270
271
        self.assertEqual(['r@b-1', 'r@c-2', 'r@c-3', 'r@c-4', 'r@c-5'],
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
272
                wt_child.branch.revision_history())
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
273
        self.assertEqual(['r@b-1'], b_base.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
274
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
275
        wt_child.branch.bind(sftp_b_base)
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
276
        self.assertEqual(['r@b-1'], b_base.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
277
278
    def test_commit_after_merge(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
279
        from bzrlib.builtins import merge
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
280
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
281
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
282
283
        # We want merge to be able to be a local only
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
284
        # operation, because it does not alter the branch data.
285
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
286
        # But we can't fail afterwards
287
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
288
        wt_other = wt_child.bzrdir.sprout('other').open_workingtree()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
289
290
        open('other/c', 'wb').write('file c\n')
291
        wt_other.add('c')
292
        wt_other.commit('adding c', rev_id='r@d-2')
293
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
294
        self.failIf(wt_child.branch.repository.has_revision('r@d-2'))
295
        self.failIf(b_base.repository.has_revision('r@d-2'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
296
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
297
        wt_child.merge_from_branch(wt_other.branch)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
298
299
        self.failUnlessExists('child/c')
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
300
        self.assertEqual(['r@d-2'], wt_child.get_parent_ids()[1:])
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
301
        self.failUnless(wt_child.branch.repository.has_revision('r@d-2'))
302
        self.failIf(b_base.repository.has_revision('r@d-2'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
303
304
        # Commit should succeed, and cause merged revisions to
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
305
        # be pushed into base
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
306
        wt_child.commit('merge other', rev_id='r@c-2')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
307
        self.assertEqual(['r@b-1', 'r@c-2'], wt_child.branch.revision_history())
308
        self.assertEqual(['r@b-1', 'r@c-2'], b_base.revision_history())
309
        self.failUnless(b_base.repository.has_revision('r@d-2'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
310
1505.1.29 by John Arbash Meinel
Added special exceptions when unable to contact parent branch. Added tests for failure. bind() no longer updates the remote working tree
311
    def test_commit_fails(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
312
        b_base, wt_child = self.create_branches()
1505.1.29 by John Arbash Meinel
Added special exceptions when unable to contact parent branch. Added tests for failure. bind() no longer updates the remote working tree
313
314
        open('a', 'ab').write('child adds some text\n')
315
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
316
        # this deletes the branch from memory
1505.1.29 by John Arbash Meinel
Added special exceptions when unable to contact parent branch. Added tests for failure. bind() no longer updates the remote working tree
317
        del b_base
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
318
        # and this moves it out of the way on disk
1505.1.29 by John Arbash Meinel
Added special exceptions when unable to contact parent branch. Added tests for failure. bind() no longer updates the remote working tree
319
        os.rename('base', 'hidden_base')
320
321
        self.assertRaises(errors.BoundBranchConnectionFailure,
322
                wt_child.commit, 'added text', rev_id='r@c-2')
323
324
    # TODO: jam 20051231 We need invasive failure tests, so that we can show
325
    #       performance even when something fails.
1505.1.28 by John Arbash Meinel
todo
326
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
327
328
if not paramiko_loaded:
329
    del BoundSFTPBranch
330