~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

merge from mbp.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005 by Canonical Ltd
 
2
# -*- coding: utf-8 -*-
 
3
 
 
4
# This program is free software; you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation; either version 2 of the License, or
 
7
# (at your option) any later version.
 
8
 
 
9
# This program is distributed in the hope that it will be useful,
 
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
# GNU General Public License for more details.
 
13
 
 
14
# You should have received a copy of the GNU General Public License
 
15
# along with this program; if not, write to the Free Software
 
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
 
 
18
 
 
19
"""Black-box tests for bzr pull.
 
20
"""
 
21
 
 
22
import os
 
23
 
 
24
from bzrlib.branch import Branch
 
25
from bzrlib.tests.blackbox import ExternalBase
 
26
 
 
27
class TestPull(ExternalBase):
 
28
 
 
29
    def example_branch(test):
 
30
        test.runbzr('init')
 
31
        file('hello', 'wt').write('foo')
 
32
        test.runbzr('add hello')
 
33
        test.runbzr('commit -m setup hello')
 
34
        file('goodbye', 'wt').write('baz')
 
35
        test.runbzr('add goodbye')
 
36
        test.runbzr('commit -m setup goodbye')
 
37
 
 
38
    def test_pull(self):
 
39
        """Pull changes from one branch to another."""
 
40
        os.mkdir('a')
 
41
        os.chdir('a')
 
42
 
 
43
        self.example_branch()
 
44
        self.runbzr('pull', retcode=3)
 
45
        self.runbzr('missing', retcode=3)
 
46
        self.runbzr('missing .')
 
47
        self.runbzr('missing')
 
48
        self.runbzr('pull')
 
49
        self.runbzr('pull /', retcode=3)
 
50
        self.runbzr('pull')
 
51
 
 
52
        os.chdir('..')
 
53
        self.runbzr('branch a b')
 
54
        os.chdir('b')
 
55
        self.runbzr('pull')
 
56
        os.mkdir('subdir')
 
57
        self.runbzr('add subdir')
 
58
        self.runbzr('commit -m blah --unchanged')
 
59
        os.chdir('../a')
 
60
        a = Branch.open('.')
 
61
        b = Branch.open('../b')
 
62
        self.assertEquals(a.revision_history(), b.revision_history()[:-1])
 
63
        self.runbzr('pull ../b')
 
64
        self.assertEquals(a.revision_history(), b.revision_history())
 
65
        self.runbzr('commit -m blah2 --unchanged')
 
66
        os.chdir('../b')
 
67
        self.runbzr('commit -m blah3 --unchanged')
 
68
        # no overwrite
 
69
        self.runbzr('pull ../a', retcode=3)
 
70
        os.chdir('..')
 
71
        self.runbzr('branch b overwriteme')
 
72
        os.chdir('overwriteme')
 
73
        self.runbzr('pull --overwrite ../a')
 
74
        overwritten = Branch.open('.')
 
75
        self.assertEqual(overwritten.revision_history(),
 
76
                         a.revision_history())
 
77
        os.chdir('../a')
 
78
        self.runbzr('merge ../b')
 
79
        self.runbzr('commit -m blah4 --unchanged')
 
80
        os.chdir('../b/subdir')
 
81
        self.runbzr('pull ../../a')
 
82
        self.assertEquals(a.revision_history()[-1], b.revision_history()[-1])
 
83
        self.runbzr('commit -m blah5 --unchanged')
 
84
        self.runbzr('commit -m blah6 --unchanged')
 
85
        os.chdir('..')
 
86
        self.runbzr('pull ../a')
 
87
        os.chdir('../a')
 
88
        self.runbzr('commit -m blah7 --unchanged')
 
89
        self.runbzr('merge ../b')
 
90
        self.runbzr('commit -m blah8 --unchanged')
 
91
        self.runbzr('pull ../b')
 
92
        self.runbzr('pull ../b')
 
93
 
 
94
    def test_overwrite_uptodate(self):
 
95
        # Make sure pull --overwrite overwrites
 
96
        # even if the target branch has merged
 
97
        # everything already.
 
98
        bzr = self.run_bzr
 
99
 
 
100
        def get_rh(expected_len):
 
101
            rh = self.capture('revision-history')
 
102
            # Make sure we don't have trailing empty revisions
 
103
            rh = rh.strip().split('\n')
 
104
            self.assertEqual(len(rh), expected_len)
 
105
            return rh
 
106
 
 
107
        os.mkdir('a')
 
108
        os.chdir('a')
 
109
        bzr('init')
 
110
        open('foo', 'wb').write('original\n')
 
111
        bzr('add', 'foo')
 
112
        bzr('commit', '-m', 'initial commit')
 
113
 
 
114
        os.chdir('..')
 
115
        bzr('branch', 'a', 'b')
 
116
 
 
117
        os.chdir('a')
 
118
        open('foo', 'wb').write('changed\n')
 
119
        bzr('commit', '-m', 'later change')
 
120
 
 
121
        open('foo', 'wb').write('another\n')
 
122
        bzr('commit', '-m', 'a third change')
 
123
 
 
124
        rev_history_a = get_rh(3)
 
125
 
 
126
        os.chdir('../b')
 
127
        bzr('merge', '../a')
 
128
        bzr('commit', '-m', 'merge')
 
129
 
 
130
        rev_history_b = get_rh(2)
 
131
 
 
132
        bzr('pull', '--overwrite', '../a')
 
133
        rev_history_b = get_rh(3)
 
134
 
 
135
        self.assertEqual(rev_history_b, rev_history_a)
 
136
 
 
137
    def test_overwrite_children(self):
 
138
        # Make sure pull --overwrite sets the revision-history
 
139
        # to be identical to the pull source, even if we have convergence
 
140
        bzr = self.run_bzr
 
141
 
 
142
        def get_rh(expected_len):
 
143
            rh = self.capture('revision-history')
 
144
            # Make sure we don't have trailing empty revisions
 
145
            rh = rh.strip().split('\n')
 
146
            self.assertEqual(len(rh), expected_len)
 
147
            return rh
 
148
 
 
149
        os.mkdir('a')
 
150
        os.chdir('a')
 
151
        bzr('init')
 
152
        open('foo', 'wb').write('original\n')
 
153
        bzr('add', 'foo')
 
154
        bzr('commit', '-m', 'initial commit')
 
155
 
 
156
        os.chdir('..')
 
157
        bzr('branch', 'a', 'b')
 
158
 
 
159
        os.chdir('a')
 
160
        open('foo', 'wb').write('changed\n')
 
161
        bzr('commit', '-m', 'later change')
 
162
 
 
163
        open('foo', 'wb').write('another\n')
 
164
        bzr('commit', '-m', 'a third change')
 
165
 
 
166
        rev_history_a = get_rh(3)
 
167
 
 
168
        os.chdir('../b')
 
169
        bzr('merge', '../a')
 
170
        bzr('commit', '-m', 'merge')
 
171
 
 
172
        rev_history_b = get_rh(2)
 
173
 
 
174
        os.chdir('../a')
 
175
        open('foo', 'wb').write('a fourth change\n')
 
176
        bzr('commit', '-m', 'a fourth change')
 
177
 
 
178
        rev_history_a = get_rh(4)
 
179
 
 
180
        # With convergence, we could just pull over the
 
181
        # new change, but with --overwrite, we want to switch our history
 
182
        os.chdir('../b')
 
183
        bzr('pull', '--overwrite', '../a')
 
184
        rev_history_b = get_rh(4)
 
185
 
 
186
        self.assertEqual(rev_history_b, rev_history_a)
 
187
 
 
188