/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: Canonical.com Patch Queue Manager
  • Date: 2007-03-09 02:08:38 UTC
  • mfrom: (2327.1.1 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20070309020838-1dd7e652bc5c30ff
(Dmitry Vasiliev) Support for Putty SSH, and improved vendor support

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 by Canonical Ltd
2
 
# -*- coding: utf-8 -*-
3
 
 
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
 
2
#
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
6
5
# the Free Software Foundation; either version 2 of the License, or
7
6
# (at your option) any later version.
8
 
 
 
7
#
9
8
# This program is distributed in the hope that it will be useful,
10
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
11
# GNU General Public License for more details.
13
 
 
 
12
#
14
13
# You should have received a copy of the GNU General Public License
15
14
# along with this program; if not, write to the Free Software
16
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
16
 
18
17
 
19
 
"""Black-box tests for bzr pull.
20
 
"""
 
18
"""Black-box tests for bzr pull."""
21
19
 
22
20
import os
23
21
import sys
24
22
 
25
23
from bzrlib.branch import Branch
26
 
from bzrlib.osutils import abspath
27
24
from bzrlib.tests.blackbox import ExternalBase
28
25
from bzrlib.uncommit import uncommit
 
26
from bzrlib import urlutils
29
27
 
30
28
 
31
29
class TestPull(ExternalBase):
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')
104
96
        self.runbzr('pull ../b')
105
97
        self.runbzr('pull ../b')
106
98
 
 
99
    def test_pull_dash_d(self):
 
100
        os.mkdir('a')
 
101
        os.chdir('a')
 
102
        self.example_branch()
 
103
        self.runbzr('init ../b')
 
104
        self.runbzr('init ../c')
 
105
        # pull into that branch
 
106
        self.runbzr('pull -d ../b .')
 
107
        # pull into a branch specified by a url
 
108
        c_url = urlutils.local_path_to_url('../c')
 
109
        self.assertStartsWith(c_url, 'file://')
 
110
        self.runbzr('pull -d %s .' % c_url)
 
111
 
107
112
    def test_pull_revision(self):
108
113
        """Pull some changes from one branch to another."""
109
114
        os.mkdir('a')
233
238
        self.build_tree(['branch_a/a'])
234
239
        tree_a.add('a')
235
240
        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()
 
241
        tree_b = branch_a.bzrdir.sprout('branch_b').open_workingtree()
 
242
        branch_b = tree_b.branch
 
243
        tree_c = branch_a.bzrdir.sprout('branch_c').open_workingtree()
 
244
        branch_c = tree_c.branch
240
245
        self.build_tree(['branch_a/b'])
241
246
        tree_a.add('b')
242
247
        tree_a.commit('commit b')
255
260
        tree_b.commit('commit d')
256
261
        out = self.runbzr('pull ../branch_a', retcode=3)
257
262
        self.assertEquals(out,
258
 
                ('','bzr: ERROR: These branches have diverged.  Try merge.\n'))
259
 
        self.assertEquals(abspath(branch_b.get_parent()), abspath(parent))
 
263
                ('','bzr: ERROR: These branches have diverged.'
 
264
                    ' Use the merge command to reconcile them.\n'))
 
265
        self.assertEquals(branch_b.get_parent(), parent)
260
266
        # test implicit --remember after resolving previous failure
261
267
        uncommit(branch=branch_b, tree=tree_b)
262
268
        transport.delete('branch_b/d')
263
269
        self.runbzr('pull')
264
 
        self.assertEquals(abspath(branch_b.get_parent()), abspath(parent))
 
270
        self.assertEquals(branch_b.get_parent(), parent)
265
271
        # test explicit --remember
266
272
        self.runbzr('pull ../branch_c --remember')
267
 
        self.assertEquals(abspath(branch_b.get_parent()),
268
 
                          abspath(branch_c.bzrdir.root_transport.base))
 
273
        self.assertEquals(branch_b.get_parent(),
 
274
                          branch_c.bzrdir.root_transport.base)
 
275
 
 
276
    def test_pull_bundle(self):
 
277
        from bzrlib.testament import Testament
 
278
        # Build up 2 trees and prepare for a pull
 
279
        tree_a = self.make_branch_and_tree('branch_a')
 
280
        f = open('branch_a/a', 'wb')
 
281
        f.write('hello')
 
282
        f.close()
 
283
        tree_a.add('a')
 
284
        tree_a.commit('message')
 
285
 
 
286
        tree_b = tree_a.bzrdir.sprout('branch_b').open_workingtree()
 
287
 
 
288
        # Make a change to 'a' that 'b' can pull
 
289
        f = open('branch_a/a', 'wb')
 
290
        f.write('hey there')
 
291
        f.close()
 
292
        tree_a.commit('message')
 
293
 
 
294
        # Create the bundle for 'b' to pull
 
295
        os.chdir('branch_a')
 
296
        bundle_file = open('../bundle', 'wb')
 
297
        bundle_file.write(self.run_bzr('bundle', '../branch_b')[0])
 
298
        bundle_file.close()
 
299
 
 
300
        os.chdir('../branch_b')
 
301
        out, err = self.run_bzr('pull', '../bundle')
 
302
        self.assertEqual(out,
 
303
                         'Now on revision 2.\n')
 
304
        self.assertEqual(err,
 
305
                ' M  a\nAll changes applied successfully.\n')
 
306
 
 
307
        self.assertEqualDiff(tree_a.branch.revision_history(),
 
308
                             tree_b.branch.revision_history())
 
309
 
 
310
        testament_a = Testament.from_revision(tree_a.branch.repository,
 
311
                                              tree_a.get_parent_ids()[0])
 
312
        testament_b = Testament.from_revision(tree_b.branch.repository,
 
313
                                              tree_b.get_parent_ids()[0])
 
314
        self.assertEqualDiff(testament_a.as_text(),
 
315
                             testament_b.as_text())
 
316
 
 
317
        # it is legal to attempt to pull an already-merged bundle
 
318
        out, err = self.run_bzr('pull', '../bundle')
 
319
        self.assertEqual(err, '')
 
320
        self.assertEqual(out, 'No revisions to pull.\n')