~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Wouter van Heyst
  • Date: 2006-06-07 16:05:27 UTC
  • mto: This revision was merged to the branch mainline in revision 1752.
  • Revision ID: larstiq@larstiq.dyndns.org-20060607160527-2b3649154d0e2e84
more code cleanup

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
2
 
#
 
1
# Copyright (C) 2005 by Canonical Ltd
 
2
# -*- coding: utf-8 -*-
 
3
 
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
5
6
# the Free Software Foundation; either version 2 of the License, or
6
7
# (at your option) any later version.
7
 
#
 
8
 
8
9
# This program is distributed in the hope that it will be useful,
9
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
12
# GNU General Public License for more details.
12
 
#
 
13
 
13
14
# You should have received a copy of the GNU General Public License
14
15
# along with this program; if not, write to the Free Software
15
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23
24
from bzrlib.branch import Branch
24
25
from bzrlib.tests.blackbox import ExternalBase
25
26
from bzrlib.uncommit import uncommit
26
 
from bzrlib import urlutils
27
27
 
28
28
 
29
29
class TestPull(ExternalBase):
30
30
 
31
31
    def example_branch(test):
32
 
        test.run_bzr('init')
 
32
        test.runbzr('init')
33
33
        file('hello', 'wt').write('foo')
34
 
        test.run_bzr('add hello')
35
 
        test.run_bzr('commit -m setup hello')
 
34
        test.runbzr('add hello')
 
35
        test.runbzr('commit -m setup hello')
36
36
        file('goodbye', 'wt').write('baz')
37
 
        test.run_bzr('add goodbye')
38
 
        test.run_bzr('commit -m setup goodbye')
 
37
        test.runbzr('add goodbye')
 
38
        test.runbzr('commit -m setup goodbye')
39
39
 
40
40
    def test_pull(self):
41
41
        """Pull changes from one branch to another."""
43
43
        os.chdir('a')
44
44
 
45
45
        self.example_branch()
46
 
        self.run_bzr('pull', retcode=3)
47
 
        self.run_bzr('missing', retcode=3)
48
 
        self.run_bzr('missing .')
49
 
        self.run_bzr('missing')
 
46
        self.runbzr('pull', retcode=3)
 
47
        self.runbzr('missing', retcode=3)
 
48
        self.runbzr('missing .')
 
49
        self.runbzr('missing')
50
50
        # this will work on windows because we check for the same branch
51
51
        # in pull - if it fails, it is a regression
52
 
        self.run_bzr('pull')
53
 
        self.run_bzr('pull /', retcode=3)
 
52
        self.runbzr('pull')
 
53
        self.runbzr('pull /', retcode=3)
54
54
        if sys.platform not in ('win32', 'cygwin'):
55
 
            self.run_bzr('pull')
 
55
            self.runbzr('pull')
56
56
 
57
57
        os.chdir('..')
58
 
        self.run_bzr('branch a b')
 
58
        self.runbzr('branch a b')
59
59
        os.chdir('b')
60
 
        self.run_bzr('pull')
 
60
        self.runbzr('pull')
61
61
        os.mkdir('subdir')
62
 
        self.run_bzr('add subdir')
63
 
        self.run_bzr('commit -m blah --unchanged')
 
62
        self.runbzr('add subdir')
 
63
        self.runbzr('commit -m blah --unchanged')
64
64
        os.chdir('../a')
65
65
        a = Branch.open('.')
66
66
        b = Branch.open('../b')
67
67
        self.assertEquals(a.revision_history(), b.revision_history()[:-1])
68
 
        self.run_bzr('pull ../b')
 
68
        self.runbzr('pull ../b')
69
69
        self.assertEquals(a.revision_history(), b.revision_history())
70
 
        self.run_bzr('commit -m blah2 --unchanged')
 
70
        self.runbzr('commit -m blah2 --unchanged')
71
71
        os.chdir('../b')
72
 
        self.run_bzr('commit -m blah3 --unchanged')
 
72
        self.runbzr('commit -m blah3 --unchanged')
73
73
        # no overwrite
74
 
        self.run_bzr('pull ../a', retcode=3)
 
74
        self.runbzr('pull ../a', retcode=3)
75
75
        os.chdir('..')
76
 
        self.run_bzr('branch b overwriteme')
 
76
        self.runbzr('branch b overwriteme')
77
77
        os.chdir('overwriteme')
78
 
        self.run_bzr('pull --overwrite ../a')
 
78
        self.runbzr('pull --overwrite ../a')
79
79
        overwritten = Branch.open('.')
80
80
        self.assertEqual(overwritten.revision_history(),
81
81
                         a.revision_history())
82
82
        os.chdir('../a')
83
 
        self.run_bzr('merge ../b')
84
 
        self.run_bzr('commit -m blah4 --unchanged')
 
83
        self.runbzr('merge ../b')
 
84
        self.runbzr('commit -m blah4 --unchanged')
85
85
        os.chdir('../b/subdir')
86
 
        self.run_bzr('pull ../../a')
 
86
        self.runbzr('pull ../../a')
87
87
        self.assertEquals(a.revision_history()[-1], b.revision_history()[-1])
88
 
        self.run_bzr('commit -m blah5 --unchanged')
89
 
        self.run_bzr('commit -m blah6 --unchanged')
 
88
        self.runbzr('commit -m blah5 --unchanged')
 
89
        self.runbzr('commit -m blah6 --unchanged')
90
90
        os.chdir('..')
91
 
        self.run_bzr('pull ../a')
 
91
        self.runbzr('pull ../a')
92
92
        os.chdir('../a')
93
 
        self.run_bzr('commit -m blah7 --unchanged')
94
 
        self.run_bzr('merge ../b')
95
 
        self.run_bzr('commit -m blah8 --unchanged')
96
 
        self.run_bzr('pull ../b')
97
 
        self.run_bzr('pull ../b')
98
 
 
99
 
    def test_pull_dash_d(self):
100
 
        os.mkdir('a')
101
 
        os.chdir('a')
102
 
        self.example_branch()
103
 
        self.run_bzr('init ../b')
104
 
        self.run_bzr('init ../c')
105
 
        # pull into that branch
106
 
        self.run_bzr('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.run_bzr('pull -d %s .' % c_url)
 
93
        self.runbzr('commit -m blah7 --unchanged')
 
94
        self.runbzr('merge ../b')
 
95
        self.runbzr('commit -m blah8 --unchanged')
 
96
        self.runbzr('pull ../b')
 
97
        self.runbzr('pull ../b')
111
98
 
112
99
    def test_pull_revision(self):
113
100
        """Pull some changes from one branch to another."""
116
103
 
117
104
        self.example_branch()
118
105
        file('hello2', 'wt').write('foo')
119
 
        self.run_bzr('add hello2')
120
 
        self.run_bzr('commit -m setup hello2')
 
106
        self.runbzr('add hello2')
 
107
        self.runbzr('commit -m setup hello2')
121
108
        file('goodbye2', 'wt').write('baz')
122
 
        self.run_bzr('add goodbye2')
123
 
        self.run_bzr('commit -m setup goodbye2')
 
109
        self.runbzr('add goodbye2')
 
110
        self.runbzr('commit -m setup goodbye2')
124
111
 
125
112
        os.chdir('..')
126
 
        self.run_bzr('branch -r 1 a b')
 
113
        self.runbzr('branch -r 1 a b')
127
114
        os.chdir('b')
128
 
        self.run_bzr('pull -r 2')
 
115
        self.runbzr('pull -r 2')
129
116
        a = Branch.open('../a')
130
117
        b = Branch.open('.')
131
118
        self.assertEquals(a.revno(),4)
132
119
        self.assertEquals(b.revno(),2)
133
 
        self.run_bzr('pull -r 3')
 
120
        self.runbzr('pull -r 3')
134
121
        self.assertEquals(b.revno(),3)
135
 
        self.run_bzr('pull -r 4')
 
122
        self.runbzr('pull -r 4')
136
123
        self.assertEquals(a.revision_history(), b.revision_history())
137
124
 
138
125
 
143
130
        bzr = self.run_bzr
144
131
 
145
132
        def get_rh(expected_len):
146
 
            rh = self.run_bzr(['revision-history'])[0]
 
133
            rh = self.capture('revision-history')
147
134
            # Make sure we don't have trailing empty revisions
148
135
            rh = rh.strip().split('\n')
149
136
            self.assertEqual(len(rh), expected_len)
185
172
        bzr = self.run_bzr
186
173
 
187
174
        def get_rh(expected_len):
188
 
            rh = self.run_bzr(['revision-history'])[0]
 
175
            rh = self.capture('revision-history')
189
176
            # Make sure we don't have trailing empty revisions
190
177
            rh = rh.strip().split('\n')
191
178
            self.assertEqual(len(rh), expected_len)
251
238
        self.assertEqual(None, branch_b.get_parent())
252
239
        # test pull for failure without parent set
253
240
        os.chdir('branch_b')
254
 
        out = self.run_bzr('pull', retcode=3)
 
241
        out = self.runbzr('pull', retcode=3)
255
242
        self.assertEquals(out,
256
243
                ('','bzr: ERROR: No pull location known or specified.\n'))
257
244
        # test implicit --remember when no parent set, this pull conflicts
258
245
        self.build_tree(['d'])
259
246
        tree_b.add('d')
260
247
        tree_b.commit('commit d')
261
 
        out = self.run_bzr('pull ../branch_a', retcode=3)
 
248
        out = self.runbzr('pull ../branch_a', retcode=3)
262
249
        self.assertEquals(out,
263
 
                ('','bzr: ERROR: These branches have diverged.'
264
 
                    ' Use the merge command to reconcile them.\n'))
 
250
                ('','bzr: ERROR: These branches have diverged.  Try merge.\n'))
265
251
        self.assertEquals(branch_b.get_parent(), parent)
266
252
        # test implicit --remember after resolving previous failure
267
253
        uncommit(branch=branch_b, tree=tree_b)
268
254
        transport.delete('branch_b/d')
269
 
        self.run_bzr('pull')
 
255
        self.runbzr('pull')
270
256
        self.assertEquals(branch_b.get_parent(), parent)
271
257
        # test explicit --remember
272
 
        self.run_bzr('pull ../branch_c --remember')
 
258
        self.runbzr('pull ../branch_c --remember')
273
259
        self.assertEquals(branch_b.get_parent(),
274
260
                          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')