/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
4763.2.4 by John Arbash Meinel
merge bzr.2.1 in preparation for NEWS entry.
1
# Copyright (C) 2005-2010 Canonical Ltd
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
2
#
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
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
#
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
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
#
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
16
17
1666.1.5 by Robert Collins
Merge bound branch test performance improvements.
18
"""Black-box tests for bzr pull."""
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
19
20
import os
21
import sys
22
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
23
from bzrlib import (
24
    debug,
25
    remote,
26
    urlutils,
27
    )
28
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
29
from bzrlib.branch import Branch
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
30
from bzrlib.directory_service import directories
2738.2.5 by Daniel Watkins
Now use pathjoin in test_pull.
31
from bzrlib.osutils import pathjoin
5283.4.5 by Martin Pool
Update remaining subclasses of ExternalBase
32
from bzrlib.tests import TestCaseWithTransport
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
33
from bzrlib.uncommit import uncommit
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
34
from bzrlib.workingtree import WorkingTree
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
35
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
36
5283.4.5 by Martin Pool
Update remaining subclasses of ExternalBase
37
class TestPull(TestCaseWithTransport):
1185.50.7 by John Arbash Meinel
Fix broken test from refactoring blackbox/test_pull
38
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
39
    def example_branch(self, path='.'):
40
        tree = self.make_branch_and_tree(path)
41
        self.build_tree_contents([
2738.2.5 by Daniel Watkins
Now use pathjoin in test_pull.
42
            (pathjoin(path, 'hello'),   'foo'),
43
            (pathjoin(path, 'goodbye'), 'baz')])
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
44
        tree.add('hello')
45
        tree.commit(message='setup')
46
        tree.add('goodbye')
47
        tree.commit(message='setup')
48
        return tree
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
49
50
    def test_pull(self):
51
        """Pull changes from one branch to another."""
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
52
        a_tree = self.example_branch('a')
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
53
        os.chdir('a')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
54
        self.run_bzr('pull', retcode=3)
55
        self.run_bzr('missing', retcode=3)
56
        self.run_bzr('missing .')
57
        self.run_bzr('missing')
1666.1.5 by Robert Collins
Merge bound branch test performance improvements.
58
        # this will work on windows because we check for the same branch
59
        # in pull - if it fails, it is a regression
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
60
        self.run_bzr('pull')
61
        self.run_bzr('pull /', retcode=3)
1185.31.31 by John Arbash Meinel
avoiding 'bzr pull .' means all tests pass under cygwin
62
        if sys.platform not in ('win32', 'cygwin'):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
63
            self.run_bzr('pull')
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
64
65
        os.chdir('..')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
66
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
67
        os.chdir('b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
68
        self.run_bzr('pull')
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
69
        os.mkdir('subdir')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
70
        b_tree.add('subdir')
71
        b_tree.commit(message='blah', allow_pointless=True)
72
73
        os.chdir('..')
74
        a = Branch.open('a')
75
        b = Branch.open('b')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
76
        self.assertEqual(a.revision_history(), b.revision_history()[:-1])
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
77
78
        os.chdir('a')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
79
        self.run_bzr('pull ../b')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
80
        self.assertEqual(a.revision_history(), b.revision_history())
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
81
        a_tree.commit(message='blah2', allow_pointless=True)
82
        b_tree.commit(message='blah3', allow_pointless=True)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
83
        # no overwrite
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
84
        os.chdir('../b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
85
        self.run_bzr('pull ../a', retcode=3)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
86
        os.chdir('..')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
87
        b_tree.bzrdir.sprout('overwriteme')
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
88
        os.chdir('overwriteme')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
89
        self.run_bzr('pull --overwrite ../a')
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
90
        overwritten = Branch.open('.')
91
        self.assertEqual(overwritten.revision_history(),
92
                         a.revision_history())
2738.2.6 by Daniel Watkins
Now use internal merging.
93
        a_tree.merge_from_branch(b_tree.branch)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
94
        a_tree.commit(message="blah4", allow_pointless=True)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
95
        os.chdir('../b/subdir')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
96
        self.run_bzr('pull ../../a')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
97
        self.assertEqual(a.revision_history()[-1], b.revision_history()[-1])
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
98
        sub_tree = WorkingTree.open_containing('.')[0]
99
        sub_tree.commit(message="blah5", allow_pointless=True)
100
        sub_tree.commit(message="blah6", allow_pointless=True)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
101
        os.chdir('..')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
102
        self.run_bzr('pull ../a')
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
103
        os.chdir('../a')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
104
        a_tree.commit(message="blah7", allow_pointless=True)
105
        a_tree.merge_from_branch(b_tree.branch)
106
        a_tree.commit(message="blah8", allow_pointless=True)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
107
        self.run_bzr('pull ../b')
108
        self.run_bzr('pull ../b')
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
109
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
110
    def test_pull_dash_d(self):
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
111
        self.example_branch('a')
112
        self.make_branch_and_tree('b')
113
        self.make_branch_and_tree('c')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
114
        # pull into that branch
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
115
        self.run_bzr('pull -d b a')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
116
        # pull into a branch specified by a url
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
117
        c_url = urlutils.local_path_to_url('c')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
118
        self.assertStartsWith(c_url, 'file://')
2738.2.3 by Daniel Watkins
Fixed jam's concerns.
119
        self.run_bzr(['pull', '-d', c_url, 'a'])
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
120
1185.76.2 by Erik Bågfors
test for pull --revision
121
    def test_pull_revision(self):
122
        """Pull some changes from one branch to another."""
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
123
        a_tree = self.example_branch('a')
124
        self.build_tree_contents([
125
            ('a/hello2',   'foo'),
126
            ('a/goodbye2', 'baz')])
127
        a_tree.add('hello2')
128
        a_tree.commit(message="setup")
129
        a_tree.add('goodbye2')
130
        a_tree.commit(message="setup")
131
132
        b_tree = a_tree.bzrdir.sprout('b',
133
                   revision_id=a_tree.branch.get_rev_id(1)).open_workingtree()
1185.76.2 by Erik Bågfors
test for pull --revision
134
        os.chdir('b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
135
        self.run_bzr('pull -r 2')
1185.76.2 by Erik Bågfors
test for pull --revision
136
        a = Branch.open('../a')
137
        b = Branch.open('.')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
138
        self.assertEqual(a.revno(),4)
139
        self.assertEqual(b.revno(),2)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
140
        self.run_bzr('pull -r 3')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
141
        self.assertEqual(b.revno(),3)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
142
        self.run_bzr('pull -r 4')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
143
        self.assertEqual(a.revision_history(), b.revision_history())
1185.76.2 by Erik Bågfors
test for pull --revision
144
1185.50.7 by John Arbash Meinel
Fix broken test from refactoring blackbox/test_pull
145
    def test_overwrite_uptodate(self):
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
146
        # Make sure pull --overwrite overwrites
147
        # even if the target branch has merged
148
        # everything already.
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
149
        a_tree = self.make_branch_and_tree('a')
150
        self.build_tree_contents([('a/foo', 'original\n')])
151
        a_tree.add('foo')
152
        a_tree.commit(message='initial commit')
153
154
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
155
156
        self.build_tree_contents([('a/foo', 'changed\n')])
157
        a_tree.commit(message='later change')
158
159
        self.build_tree_contents([('a/foo', 'a third change')])
160
        a_tree.commit(message='a third change')
161
2738.2.1 by Daniel Watkins
Merged original fixes.
162
        rev_history_a = a_tree.branch.revision_history()
163
        self.assertEqual(len(rev_history_a), 3)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
164
165
        b_tree.merge_from_branch(a_tree.branch)
166
        b_tree.commit(message='merge')
167
168
        self.assertEqual(len(b_tree.branch.revision_history()), 2)
169
170
        os.chdir('b')
171
        self.run_bzr('pull --overwrite ../a')
2738.2.1 by Daniel Watkins
Merged original fixes.
172
        rev_history_b = b_tree.branch.revision_history()
173
        self.assertEqual(len(rev_history_b), 3)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
174
175
        self.assertEqual(rev_history_b, rev_history_a)
176
1185.50.7 by John Arbash Meinel
Fix broken test from refactoring blackbox/test_pull
177
    def test_overwrite_children(self):
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
178
        # Make sure pull --overwrite sets the revision-history
179
        # to be identical to the pull source, even if we have convergence
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
180
        a_tree = self.make_branch_and_tree('a')
181
        self.build_tree_contents([('a/foo', 'original\n')])
182
        a_tree.add('foo')
183
        a_tree.commit(message='initial commit')
184
185
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
186
187
        self.build_tree_contents([('a/foo', 'changed\n')])
188
        a_tree.commit(message='later change')
189
190
        self.build_tree_contents([('a/foo', 'a third change')])
191
        a_tree.commit(message='a third change')
192
193
        self.assertEqual(len(a_tree.branch.revision_history()), 3)
194
195
        b_tree.merge_from_branch(a_tree.branch)
196
        b_tree.commit(message='merge')
197
198
        self.assertEqual(len(b_tree.branch.revision_history()), 2)
199
200
        self.build_tree_contents([('a/foo', 'a fourth change\n')])
201
        a_tree.commit(message='a fourth change')
202
2738.2.1 by Daniel Watkins
Merged original fixes.
203
        rev_history_a = a_tree.branch.revision_history()
204
        self.assertEqual(len(rev_history_a), 4)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
205
206
        # With convergence, we could just pull over the
207
        # new change, but with --overwrite, we want to switch our history
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
208
        os.chdir('b')
209
        self.run_bzr('pull --overwrite ../a')
2738.2.1 by Daniel Watkins
Merged original fixes.
210
        rev_history_b = b_tree.branch.revision_history()
211
        self.assertEqual(len(rev_history_b), 4)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
212
213
        self.assertEqual(rev_history_b, rev_history_a)
214
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
215
    def test_pull_remember(self):
216
        """Pull changes from one branch to another and test parent location."""
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
217
        transport = self.get_transport()
218
        tree_a = self.make_branch_and_tree('branch_a')
219
        branch_a = tree_a.branch
220
        self.build_tree(['branch_a/a'])
221
        tree_a.add('a')
222
        tree_a.commit('commit a')
1666.1.4 by Robert Collins
* 'Metadir' is now the default disk format. This improves behaviour in
223
        tree_b = branch_a.bzrdir.sprout('branch_b').open_workingtree()
224
        branch_b = tree_b.branch
225
        tree_c = branch_a.bzrdir.sprout('branch_c').open_workingtree()
226
        branch_c = tree_c.branch
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
227
        self.build_tree(['branch_a/b'])
228
        tree_a.add('b')
229
        tree_a.commit('commit b')
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
230
        # reset parent
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
231
        parent = branch_b.get_parent()
232
        branch_b.set_parent(None)
233
        self.assertEqual(None, branch_b.get_parent())
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
234
        # test pull for failure without parent set
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
235
        os.chdir('branch_b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
236
        out = self.run_bzr('pull', retcode=3)
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
237
        self.assertEqual(out,
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
238
                ('','bzr: ERROR: No pull location known or specified.\n'))
239
        # test implicit --remember when no parent set, this pull conflicts
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
240
        self.build_tree(['d'])
241
        tree_b.add('d')
242
        tree_b.commit('commit d')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
243
        out = self.run_bzr('pull ../branch_a', retcode=3)
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
244
        self.assertEqual(out,
2221.5.13 by Dmitry Vasiliev
Fixed expected message in test
245
                ('','bzr: ERROR: These branches have diverged.'
4297.3.3 by Jelmer Vernooij
Fix pull --remember test.
246
                    ' Use the missing command to see how.\n'
247
                    'Use the merge command to reconcile them.\n'))
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
248
        self.assertEqual(branch_b.get_parent(), parent)
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
249
        # test implicit --remember after resolving previous failure
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
250
        uncommit(branch=branch_b, tree=tree_b)
251
        transport.delete('branch_b/d')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
252
        self.run_bzr('pull')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
253
        self.assertEqual(branch_b.get_parent(), parent)
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
254
        # test explicit --remember
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
255
        self.run_bzr('pull ../branch_c --remember')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
256
        self.assertEqual(branch_b.get_parent(),
1685.1.19 by John Arbash Meinel
pull/merge/branch/missing should all save the absolute path to the other branch, not the relative one
257
                          branch_c.bzrdir.root_transport.base)
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
258
259
    def test_pull_bundle(self):
260
        from bzrlib.testament import Testament
261
        # Build up 2 trees and prepare for a pull
262
        tree_a = self.make_branch_and_tree('branch_a')
263
        f = open('branch_a/a', 'wb')
264
        f.write('hello')
265
        f.close()
266
        tree_a.add('a')
267
        tree_a.commit('message')
268
269
        tree_b = tree_a.bzrdir.sprout('branch_b').open_workingtree()
270
271
        # Make a change to 'a' that 'b' can pull
272
        f = open('branch_a/a', 'wb')
273
        f.write('hey there')
274
        f.close()
275
        tree_a.commit('message')
276
277
        # Create the bundle for 'b' to pull
278
        os.chdir('branch_a')
2654.3.1 by Aaron Bentley
Rename submit to send, make -o required, support -o- for stdout
279
        self.run_bzr('bundle ../branch_b -o ../bundle')
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
280
281
        os.chdir('../branch_b')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
282
        out, err = self.run_bzr('pull ../bundle')
2220.2.39 by Martin Pool
Pull also merges tags and warns if they conflict
283
        self.assertEqual(out,
284
                         'Now on revision 2.\n')
285
        self.assertEqual(err,
286
                ' M  a\nAll changes applied successfully.\n')
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
287
288
        self.assertEqualDiff(tree_a.branch.revision_history(),
289
                             tree_b.branch.revision_history())
290
1908.7.6 by Robert Collins
Deprecate WorkingTree.last_revision.
291
        testament_a = Testament.from_revision(tree_a.branch.repository,
292
                                              tree_a.get_parent_ids()[0])
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
293
        testament_b = Testament.from_revision(tree_b.branch.repository,
1908.7.6 by Robert Collins
Deprecate WorkingTree.last_revision.
294
                                              tree_b.get_parent_ids()[0])
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
295
        self.assertEqualDiff(testament_a.as_text(),
296
                             testament_b.as_text())
297
298
        # it is legal to attempt to pull an already-merged bundle
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
299
        out, err = self.run_bzr('pull ../bundle')
2220.2.39 by Martin Pool
Pull also merges tags and warns if they conflict
300
        self.assertEqual(err, '')
301
        self.assertEqual(out, 'No revisions to pull.\n')
1551.17.2 by Aaron Bentley
Stop showing deltas in pull -v output
302
303
    def test_pull_verbose_no_files(self):
304
        """Pull --verbose should not list modified files"""
305
        tree_a = self.make_branch_and_tree('tree_a')
306
        self.build_tree(['tree_a/foo'])
307
        tree_a.add('foo')
308
        tree_a.commit('bar')
309
        tree_b = self.make_branch_and_tree('tree_b')
310
        out = self.run_bzr('pull --verbose -d tree_b tree_a')[0]
311
        self.assertContainsRe(out, 'bar')
312
        self.assertNotContainsRe(out, 'added:')
313
        self.assertNotContainsRe(out, 'foo')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
314
315
    def test_pull_quiet(self):
316
        """Check that bzr pull --quiet does not print anything"""
317
        tree_a = self.make_branch_and_tree('tree_a')
318
        self.build_tree(['tree_a/foo'])
319
        tree_a.add('foo')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
320
        revision_id = tree_a.commit('bar')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
321
        tree_b = tree_a.bzrdir.sprout('tree_b').open_workingtree()
322
        out, err = self.run_bzr('pull --quiet -d tree_b')
323
        self.assertEqual(out, '')
324
        self.assertEqual(err, '')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
325
        self.assertEqual(tree_b.last_revision(), revision_id)
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
326
        self.build_tree(['tree_a/moo'])
327
        tree_a.add('moo')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
328
        revision_id = tree_a.commit('quack')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
329
        out, err = self.run_bzr('pull --quiet -d tree_b')
330
        self.assertEqual(out, '')
331
        self.assertEqual(err, '')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
332
        self.assertEqual(tree_b.last_revision(), revision_id)
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
333
3251.4.12 by Aaron Bentley
Updates from review
334
    def test_pull_from_directory_service(self):
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
335
        source = self.make_branch_and_tree('source')
336
        source.commit('commit 1')
337
        target = source.bzrdir.sprout('target').open_workingtree()
338
        source_last = source.commit('commit 2')
339
        class FooService(object):
340
            """A directory service that always returns source"""
341
342
            def look_up(self, name, url):
343
                return 'source'
3251.4.12 by Aaron Bentley
Updates from review
344
        directories.register('foo:', FooService, 'Testing directory service')
4985.2.1 by Vincent Ladeuil
Deploy addAttrCleanup on the whole test suite.
345
        self.addCleanup(directories.remove, 'foo:')
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
346
        self.run_bzr('pull foo:bar -d target')
347
        self.assertEqual(source_last, target.last_revision())
3848.1.1 by Aaron Bentley
Use default log format in pull -v
348
349
    def test_pull_verbose_defaults_to_long(self):
350
        tree = self.example_branch('source')
351
        target = self.make_branch_and_tree('target')
352
        out = self.run_bzr('pull -v source -d target')[0]
353
        self.assertContainsRe(out,
354
                              r'revno: 1\ncommitter: .*\nbranch nick: source')
3848.1.5 by Aaron Bentley
Updates from review
355
        self.assertNotContainsRe(out, r'\n {4}1 .*\n {6}setup\n')
3848.1.1 by Aaron Bentley
Use default log format in pull -v
356
357
    def test_pull_verbose_uses_default_log(self):
358
        tree = self.example_branch('source')
359
        target = self.make_branch_and_tree('target')
3848.1.2 by Aaron Bentley
Make test stricter
360
        target_config = target.branch.get_config()
361
        target_config.set_user_option('log_format', 'short')
3848.1.1 by Aaron Bentley
Use default log format in pull -v
362
        out = self.run_bzr('pull -v source -d target')[0]
363
        self.assertContainsRe(out, r'\n {4}1 .*\n {6}setup\n')
3848.1.5 by Aaron Bentley
Updates from review
364
        self.assertNotContainsRe(
365
            out, r'revno: 1\ncommitter: .*\nbranch nick: source')
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
366
367
    def test_pull_smart_stacked_streaming_acceptance(self):
4419.1.6 by Andrew Bennetts
Add comments requested by Martin's review.
368
        """'bzr pull -r 123' works on stacked, smart branches, even when the
369
        revision specified by the revno is only present in the fallback
370
        repository.
371
372
        See <https://launchpad.net/bugs/380314>
373
        """
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
374
        self.setup_smart_server_with_call_log()
4419.2.4 by Andrew Bennetts
Add Repository.get_rev_id_for_revno RPC, removes VFS calls from 'pull -r 123' case.
375
        # Make a stacked-on branch with two commits so that the
376
        # revision-history can't be determined just by looking at the parent
377
        # field in the revision in the stacked repo.
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
378
        parent = self.make_branch_and_tree('parent', format='1.9')
379
        parent.commit(message='first commit')
4419.2.4 by Andrew Bennetts
Add Repository.get_rev_id_for_revno RPC, removes VFS calls from 'pull -r 123' case.
380
        parent.commit(message='second commit')
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
381
        local = parent.bzrdir.sprout('local').open_workingtree()
382
        local.commit(message='local commit')
383
        local.branch.create_clone_on_transport(
384
            self.get_transport('stacked'), stacked_on=self.get_url('parent'))
385
        empty = self.make_branch_and_tree('empty', format='1.9')
386
        self.reset_smart_call_log()
387
        self.run_bzr(['pull', '-r', '1', self.get_url('stacked')],
388
            working_dir='empty')
389
        # This figure represent the amount of work to perform this use case. It
390
        # is entirely ok to reduce this number if a test fails due to rpc_count
391
        # being too low. If rpc_count increases, more network roundtrips have
392
        # become necessary for this use case. Please do not adjust this number
393
        # upwards without agreement from bzr's network support maintainers.
4419.2.4 by Andrew Bennetts
Add Repository.get_rev_id_for_revno RPC, removes VFS calls from 'pull -r 123' case.
394
        self.assertLength(18, self.hpss_calls)
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
395
        remote = Branch.open('stacked')
396
        self.assertEndsWith(remote.get_stacked_on_url(), '/parent')
4634.124.2 by Martin Pool
Add a test and news for warning about local cross-forrmat fetch
397
    
398
    def test_pull_cross_format_warning(self):
399
        """You get a warning for probably slow cross-format pulls.
400
        """
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
401
        # this is assumed to be going through InterDifferingSerializer
4634.124.2 by Martin Pool
Add a test and news for warning about local cross-forrmat fetch
402
        from_tree = self.make_branch_and_tree('from', format='2a')
403
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
404
        from_tree.commit(message='first commit')
405
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
406
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
407
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
408
409
    def test_pull_cross_format_warning_no_IDS(self):
410
        """You get a warning for probably slow cross-format pulls.
411
        """
412
        # this simulates what would happen across the network, where
413
        # interdifferingserializer is not active
414
415
        debug.debug_flags.add('IDS_never')
416
        # TestCase take care of restoring them
417
418
        from_tree = self.make_branch_and_tree('from', format='2a')
419
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
420
        from_tree.commit(message='first commit')
421
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
422
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
423
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
424
425
    def test_pull_cross_format_from_network(self):
426
        self.setup_smart_server_with_call_log()
427
        from_tree = self.make_branch_and_tree('from', format='2a')
428
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
429
        self.assertIsInstance(from_tree.branch, remote.RemoteBranch)
430
        from_tree.commit(message='first commit')
431
        out, err = self.run_bzr(['pull', '-d', 'to',
432
            from_tree.branch.bzrdir.root_transport.base])
433
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
434
            "(?m)Doing on-the-fly conversion")
4988.9.2 by Jelmer Vernooij
Add warning when attempting to fetch into experimental formats.
435
436
    def test_pull_to_experimental_format_warning(self):
437
        """You get a warning for pulling into experimental formats.
438
        """
439
        from_tree = self.make_branch_and_tree('from', format='development-subtree')
440
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
441
        from_tree.commit(message='first commit')
442
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
443
        self.assertContainsRe(err,
444
            "(?m)Fetching into experimental format")
445
446
    def test_pull_cross_to_experimental_format_warning(self):
447
        """You get a warning for pulling into experimental formats.
448
        """
449
        from_tree = self.make_branch_and_tree('from', format='2a')
450
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
451
        from_tree.commit(message='first commit')
452
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
453
        self.assertContainsRe(err,
454
            "(?m)Fetching into experimental format")
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
455
456
    def test_pull_show_base(self):
457
        """bzr pull supports --show-base
458
459
        see https://bugs.launchpad.net/bzr/+bug/202374"""
460
        # create two trees with conflicts, setup conflict, check that
461
        # conflicted file looks correct
462
        a_tree = self.example_branch('a')
463
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
464
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
465
        f = open(pathjoin('a', 'hello'),'wt')
466
        f.write('fee')
467
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
468
        a_tree.commit('fee')
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
469
470
        f = open(pathjoin('b', 'hello'),'wt')
471
        f.write('fie')
472
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
473
474
        out,err=self.run_bzr(['pull','-d','b','a','--show-base'])
475
476
        # check for message here
477
        self.assertEqual(err,
478
                         ' M  hello\nText conflict in hello\n1 conflicts encountered.\n')
479
480
        self.assertEqualDiff('<<<<<<< TREE\n'
481
                             'fie||||||| BASE-REVISION\n'
482
                             'foo=======\n'
483
                             'fee>>>>>>> MERGE-SOURCE\n',
484
                             open(pathjoin('b', 'hello')).read())
485
486
    def test_pull_show_base_working_tree_only(self):
487
        """--show-base only allowed if there's a working tree
488
489
        see https://bugs.launchpad.net/bzr/+bug/202374"""
490
        # create a branch, see that --show-base fails
491
        self.make_branch('from')
492
        self.make_branch('to')
493
        out=self.run_bzr(['pull','-d','to','from','--show-base'],retcode=3)
494
        self.assertEqual(out,
495
                         ('','bzr: ERROR: Need working tree for --show-base.\n'))
496
5616.6.1 by Jelmer Vernooij
Exit with 1 if there were tag conflicts during pull.
497
    def test_pull_tag_conflicts(self):
498
        """pulling tags with conflicts will change the exit code"""
499
        # create a branch, see that --show-base fails
500
        from_tree = self.make_branch_and_tree('from')
501
        from_tree.branch.tags.set_tag("mytag", "somerevid")
502
        to_tree = self.make_branch_and_tree('to')
503
        to_tree.branch.tags.set_tag("mytag", "anotherrevid")
504
        out = self.run_bzr(['pull','-d','to','from'],retcode=1)
505
        self.assertEqual(out,
506
            ('No revisions to pull.\nConflicting tags:\n    mytag\n', ''))