/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_pull_updates_both(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
188
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
189
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
190
        wt_newchild = b_base.bzrdir.sprout('newchild').open_workingtree()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
191
        open('newchild/b', 'wb').write('newchild b contents\n')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
192
        wt_newchild.commit('newchild', rev_id='r@d-2')
193
        self.assertEqual(['r@b-1', 'r@d-2'], wt_newchild.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
194
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
195
        wt_child.pull(wt_newchild.branch)
196
        self.assertEqual(['r@b-1', 'r@d-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', 'r@d-2'], b_base.revision_history())
198
199
    def test_bind_diverged(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
200
        from bzrlib.builtins import merge
201
202
        b_base, wt_child = self.create_branches()
203
204
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
205
        open('child/a', 'ab').write('child contents\n')
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
206
        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.
207
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
208
        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.
209
        self.assertEqual(['r@b-1'], b_base.revision_history())
210
211
        open('base/b', 'ab').write('base contents\n')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
212
        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.
213
        self.assertEqual(['r@b-1', 'r@b-2'], b_base.revision_history())
214
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
215
        sftp_b_base = Branch.open(self.get_url('base'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
216
217
        self.assertRaises(errors.DivergedBranches,
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
218
                wt_child.branch.bind, sftp_b_base)
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
        wt_child.merge_from_branch(sftp_b_base)
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
221
        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.
222
        wt_child.commit('merged', rev_id='r@c-3')
223
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
224
        # After a merge, trying to bind again should succeed but not push the
225
        # new change.
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
226
        wt_child.branch.bind(sftp_b_base)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
227
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
228
        self.assertEqual(['r@b-1', 'r@b-2'], b_base.revision_history())
229
        self.assertEqual(['r@b-1', 'r@c-2', 'r@c-3'],
230
            wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
231
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
232
    def test_bind_parent_ahead_preserves_parent(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
233
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
234
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
235
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
236
237
        open('a', 'ab').write('base changes\n')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
238
        wt_base = b_base.bzrdir.open_workingtree()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
239
        wt_base.commit('base', rev_id='r@b-2')
240
        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.
241
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
242
243
        sftp_b_base = Branch.open(self.get_url('base'))
244
        wt_child.branch.bind(sftp_b_base)
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())
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
247
248
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
249
250
        # Check and make sure it also works if parent is ahead multiple
251
        wt_base.commit('base 3', rev_id='r@b-3', allow_pointless=True)
252
        wt_base.commit('base 4', rev_id='r@b-4', allow_pointless=True)
253
        wt_base.commit('base 5', rev_id='r@b-5', allow_pointless=True)
254
255
        self.assertEqual(['r@b-1', 'r@b-2', 'r@b-3', 'r@b-4', 'r@b-5'],
256
                b_base.revision_history())
257
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
258
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
259
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
260
        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
261
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
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
    def test_bind_child_ahead_preserves_child(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
264
        b_base, wt_child = self.create_branches()
265
266
        wt_child.branch.unbind()
267
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
268
        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.
269
        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.
270
        self.assertEqual(['r@b-1'], b_base.revision_history())
271
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
272
        sftp_b_base = Branch.open(self.get_url('base'))
273
        wt_child.branch.bind(sftp_b_base)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
274
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
275
        self.assertEqual(['r@b-1'], b_base.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
276
277
        # 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.
278
        wt_child.branch.unbind()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
279
        wt_child.commit('child 3', rev_id='r@c-3', allow_pointless=True)
280
        wt_child.commit('child 4', rev_id='r@c-4', allow_pointless=True)
281
        wt_child.commit('child 5', rev_id='r@c-5', allow_pointless=True)
282
283
        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.
284
                wt_child.branch.revision_history())
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
285
        self.assertEqual(['r@b-1'], b_base.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
286
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
287
        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
288
        self.assertEqual(['r@b-1'], b_base.revision_history())
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
289
290
    def test_commit_after_merge(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
291
        from bzrlib.builtins import merge
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
292
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
293
        b_base, wt_child = self.create_branches()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
294
295
        # We want merge to be able to be a local only
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
296
        # operation, because it does not alter the branch data.
297
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
298
        # But we can't fail afterwards
299
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
300
        wt_other = wt_child.bzrdir.sprout('other').open_workingtree()
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
301
302
        open('other/c', 'wb').write('file c\n')
303
        wt_other.add('c')
304
        wt_other.commit('adding c', rev_id='r@d-2')
305
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
306
        self.failIf(wt_child.branch.repository.has_revision('r@d-2'))
307
        self.failIf(b_base.repository.has_revision('r@d-2'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
308
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
309
        wt_child.merge_from_branch(wt_other.branch)
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
310
311
        self.failUnlessExists('child/c')
1908.6.11 by Robert Collins
Remove usage of tree.pending_merges().
312
        self.assertEqual(['r@d-2'], wt_child.get_parent_ids()[1:])
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
313
        self.failUnless(wt_child.branch.repository.has_revision('r@d-2'))
314
        self.failIf(b_base.repository.has_revision('r@d-2'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
315
316
        # 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
317
        # be pushed into base
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
318
        wt_child.commit('merge other', rev_id='r@c-2')
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
319
        self.assertEqual(['r@b-1', 'r@c-2'], wt_child.branch.revision_history())
320
        self.assertEqual(['r@b-1', 'r@c-2'], b_base.revision_history())
321
        self.failUnless(b_base.repository.has_revision('r@d-2'))
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
322
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
323
    def test_commit_fails(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
324
        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
325
326
        open('a', 'ab').write('child adds some text\n')
327
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
328
        # 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
329
        del b_base
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
330
        # 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
331
        os.rename('base', 'hidden_base')
332
333
        self.assertRaises(errors.BoundBranchConnectionFailure,
334
                wt_child.commit, 'added text', rev_id='r@c-2')
335
336
    def test_pull_fails(self):
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
337
        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
338
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
339
        wt_other = wt_child.bzrdir.sprout('other').open_workingtree()
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
340
        open('other/a', 'wb').write('new contents\n')
341
        wt_other.commit('changed a', rev_id='r@d-2')
342
343
        self.assertEqual(['r@b-1'], b_base.revision_history())
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
344
        self.assertEqual(['r@b-1'], wt_child.branch.revision_history())
345
        self.assertEqual(['r@b-1', 'r@d-2'], wt_other.branch.revision_history())
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
346
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
347
        # 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
348
        del b_base
1997.1.5 by Robert Collins
``Branch.bind(other_branch)`` no longer takes a write lock on the
349
        # 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
350
        os.rename('base', 'hidden_base')
351
352
        self.assertRaises(errors.BoundBranchConnectionFailure,
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
353
                wt_child.pull, wt_other.branch)
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
354
355
    # TODO: jam 20051231 We need invasive failure tests, so that we can show
356
    #       performance even when something fails.
1505.1.28 by John Arbash Meinel
todo
357
1505.1.27 by John Arbash Meinel
Adding tests against an sftp branch.
358
359
if not paramiko_loaded:
360
    del BoundSFTPBranch
361