/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_pull.py

  • Committer: Aaron Bentley
  • Date: 2007-01-17 15:39:21 UTC
  • mfrom: (1551.9.35 Aaron's mergeable stuff)
  • mto: This revision was merged to the branch mainline in revision 2239.
  • Revision ID: abentley@panoramicfeedback.com-20070117153921-6pp9ssa2r8n5izoo
Merge bzr.ab, to avoid conflicts submitting

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 by Canonical Ltd
 
1
# Copyright (C) 2005 Canonical Ltd
2
2
# -*- coding: utf-8 -*-
3
 
 
 
3
#
4
4
# This program is free software; you can redistribute it and/or modify
5
5
# it under the terms of the GNU General Public License as published by
6
6
# the Free Software Foundation; either version 2 of the License, or
7
7
# (at your option) any later version.
8
 
 
 
8
#
9
9
# This program is distributed in the hope that it will be useful,
10
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
12
# GNU General Public License for more details.
13
 
 
 
13
#
14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
 
19
 
"""Black-box tests for bzr pull.
20
 
"""
 
19
"""Black-box tests for bzr pull."""
21
20
 
22
21
import os
23
22
import sys
24
23
 
25
24
from bzrlib.branch import Branch
26
 
from bzrlib.osutils import abspath
27
25
from bzrlib.tests.blackbox import ExternalBase
28
26
from bzrlib.uncommit import uncommit
29
27
 
49
47
        self.runbzr('missing', retcode=3)
50
48
        self.runbzr('missing .')
51
49
        self.runbzr('missing')
52
 
        if sys.platform not in ('win32', 'cygwin'):
53
 
            # This is equivalent to doing "bzr pull ."
54
 
            # Which means that bzr creates 2 branches grabbing
55
 
            # the same location, and tries to pull.
56
 
            # However, 2 branches mean 2 locks on the same file
57
 
            # which ultimately implies a deadlock.
58
 
            # (non windows platforms allow multiple locks on the
59
 
            # same file by the same calling process)
60
 
            self.runbzr('pull')
 
50
        # this will work on windows because we check for the same branch
 
51
        # in pull - if it fails, it is a regression
 
52
        self.runbzr('pull')
61
53
        self.runbzr('pull /', retcode=3)
62
54
        if sys.platform not in ('win32', 'cygwin'):
63
55
            self.runbzr('pull')
233
225
        self.build_tree(['branch_a/a'])
234
226
        tree_a.add('a')
235
227
        tree_a.commit('commit a')
236
 
        branch_b = branch_a.bzrdir.sprout('branch_b').open_branch()
237
 
        tree_b = branch_b.bzrdir.open_workingtree()
238
 
        branch_c = branch_a.bzrdir.sprout('branch_c').open_branch()
239
 
        tree_c = branch_c.bzrdir.open_workingtree()
 
228
        tree_b = branch_a.bzrdir.sprout('branch_b').open_workingtree()
 
229
        branch_b = tree_b.branch
 
230
        tree_c = branch_a.bzrdir.sprout('branch_c').open_workingtree()
 
231
        branch_c = tree_c.branch
240
232
        self.build_tree(['branch_a/b'])
241
233
        tree_a.add('b')
242
234
        tree_a.commit('commit b')
255
247
        tree_b.commit('commit d')
256
248
        out = self.runbzr('pull ../branch_a', retcode=3)
257
249
        self.assertEquals(out,
258
 
                ('','bzr: ERROR: These branches have diverged.  Try merge.\n'))
259
 
        self.assertEquals(abspath(branch_b.get_parent()), abspath(parent))
 
250
                ('','bzr: ERROR: These branches have diverged.  Use the merge command to reconcile them.\n'))
 
251
        self.assertEquals(branch_b.get_parent(), parent)
260
252
        # test implicit --remember after resolving previous failure
261
253
        uncommit(branch=branch_b, tree=tree_b)
262
254
        transport.delete('branch_b/d')
263
255
        self.runbzr('pull')
264
 
        self.assertEquals(abspath(branch_b.get_parent()), abspath(parent))
 
256
        self.assertEquals(branch_b.get_parent(), parent)
265
257
        # test explicit --remember
266
258
        self.runbzr('pull ../branch_c --remember')
267
 
        self.assertEquals(abspath(branch_b.get_parent()),
268
 
                          abspath(branch_c.bzrdir.root_transport.base))
 
259
        self.assertEquals(branch_b.get_parent(),
 
260
                          branch_c.bzrdir.root_transport.base)
 
261
 
 
262
    def test_pull_bundle(self):
 
263
        from bzrlib.testament import Testament
 
264
        # Build up 2 trees and prepare for a pull
 
265
        tree_a = self.make_branch_and_tree('branch_a')
 
266
        f = open('branch_a/a', 'wb')
 
267
        f.write('hello')
 
268
        f.close()
 
269
        tree_a.add('a')
 
270
        tree_a.commit('message')
 
271
 
 
272
        tree_b = tree_a.bzrdir.sprout('branch_b').open_workingtree()
 
273
 
 
274
        # Make a change to 'a' that 'b' can pull
 
275
        f = open('branch_a/a', 'wb')
 
276
        f.write('hey there')
 
277
        f.close()
 
278
        tree_a.commit('message')
 
279
 
 
280
        # Create the bundle for 'b' to pull
 
281
        os.chdir('branch_a')
 
282
        bundle_file = open('../bundle', 'wb')
 
283
        bundle_file.write(self.run_bzr('bundle', '../branch_b')[0])
 
284
        bundle_file.close()
 
285
 
 
286
        os.chdir('../branch_b')
 
287
        output = self.run_bzr('pull', '../bundle')
 
288
        self.assertEqual('', output[0])
 
289
        self.assertEqual('All changes applied successfully.\n'
 
290
                         '1 revision(s) pulled.\n', output[1])
 
291
 
 
292
        self.assertEqualDiff(tree_a.branch.revision_history(),
 
293
                             tree_b.branch.revision_history())
 
294
 
 
295
        testament_a = Testament.from_revision(tree_a.branch.repository,
 
296
                                              tree_a.get_parent_ids()[0])
 
297
        testament_b = Testament.from_revision(tree_b.branch.repository,
 
298
                                              tree_b.get_parent_ids()[0])
 
299
        self.assertEqualDiff(testament_a.as_text(),
 
300
                             testament_b.as_text())
 
301
 
 
302
        # it is legal to attempt to pull an already-merged bundle
 
303
        output = self.run_bzr('pull', '../bundle')
 
304
        self.assertEqual('', output[0])
 
305
        self.assertEqual('0 revision(s) pulled.\n', output[1])