/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
5535.3.28 by Andrew Bennetts
Implement fetching tags during branch pull. Needs more tests.
145
    def test_pull_tags(self):
146
        """Tags are updated by pull, and revisions named in those tags are
147
        fetched.
148
        """
149
        # Make a source, sprout a target off it
150
        builder = self.make_branch_builder('source')
151
        builder.build_commit(message="Rev 1", rev_id='rev-1')
152
        source = builder.get_branch()
153
        target_bzrdir = source.bzrdir.sprout('target')
154
        # Add a non-ancestry tag to source
155
        builder.build_commit(message="Rev 2", rev_id='rev-2')
156
        source.tags.set_tag('tag-a', 'rev-2')
157
        source.set_last_revision_info(1, 'rev-1')
158
        # Pull from source
159
        self.run_bzr('pull -d target source')
160
        target = target_bzrdir.open_branch()
161
        # The tag is present, and so is its revision.
162
        self.assertEqual('rev-2', target.tags.lookup_tag('tag-a'))
163
        target.repository.get_revision('rev-2')
164
1185.50.7 by John Arbash Meinel
Fix broken test from refactoring blackbox/test_pull
165
    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)
166
        # Make sure pull --overwrite overwrites
167
        # even if the target branch has merged
168
        # everything already.
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
169
        a_tree = self.make_branch_and_tree('a')
170
        self.build_tree_contents([('a/foo', 'original\n')])
171
        a_tree.add('foo')
172
        a_tree.commit(message='initial commit')
173
174
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
175
176
        self.build_tree_contents([('a/foo', 'changed\n')])
177
        a_tree.commit(message='later change')
178
179
        self.build_tree_contents([('a/foo', 'a third change')])
180
        a_tree.commit(message='a third change')
181
2738.2.1 by Daniel Watkins
Merged original fixes.
182
        rev_history_a = a_tree.branch.revision_history()
183
        self.assertEqual(len(rev_history_a), 3)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
184
185
        b_tree.merge_from_branch(a_tree.branch)
186
        b_tree.commit(message='merge')
187
188
        self.assertEqual(len(b_tree.branch.revision_history()), 2)
189
190
        os.chdir('b')
191
        self.run_bzr('pull --overwrite ../a')
2738.2.1 by Daniel Watkins
Merged original fixes.
192
        rev_history_b = b_tree.branch.revision_history()
193
        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)
194
195
        self.assertEqual(rev_history_b, rev_history_a)
196
1185.50.7 by John Arbash Meinel
Fix broken test from refactoring blackbox/test_pull
197
    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)
198
        # Make sure pull --overwrite sets the revision-history
199
        # 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.
200
        a_tree = self.make_branch_and_tree('a')
201
        self.build_tree_contents([('a/foo', 'original\n')])
202
        a_tree.add('foo')
203
        a_tree.commit(message='initial commit')
204
205
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
206
207
        self.build_tree_contents([('a/foo', 'changed\n')])
208
        a_tree.commit(message='later change')
209
210
        self.build_tree_contents([('a/foo', 'a third change')])
211
        a_tree.commit(message='a third change')
212
213
        self.assertEqual(len(a_tree.branch.revision_history()), 3)
214
215
        b_tree.merge_from_branch(a_tree.branch)
216
        b_tree.commit(message='merge')
217
218
        self.assertEqual(len(b_tree.branch.revision_history()), 2)
219
220
        self.build_tree_contents([('a/foo', 'a fourth change\n')])
221
        a_tree.commit(message='a fourth change')
222
2738.2.1 by Daniel Watkins
Merged original fixes.
223
        rev_history_a = a_tree.branch.revision_history()
224
        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)
225
226
        # With convergence, we could just pull over the
227
        # 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.
228
        os.chdir('b')
229
        self.run_bzr('pull --overwrite ../a')
2738.2.1 by Daniel Watkins
Merged original fixes.
230
        rev_history_b = b_tree.branch.revision_history()
231
        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)
232
233
        self.assertEqual(rev_history_b, rev_history_a)
234
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
235
    def test_pull_remember(self):
236
        """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.
237
        transport = self.get_transport()
238
        tree_a = self.make_branch_and_tree('branch_a')
239
        branch_a = tree_a.branch
240
        self.build_tree(['branch_a/a'])
241
        tree_a.add('a')
242
        tree_a.commit('commit a')
1666.1.4 by Robert Collins
* 'Metadir' is now the default disk format. This improves behaviour in
243
        tree_b = branch_a.bzrdir.sprout('branch_b').open_workingtree()
244
        branch_b = tree_b.branch
245
        tree_c = branch_a.bzrdir.sprout('branch_c').open_workingtree()
246
        branch_c = tree_c.branch
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
247
        self.build_tree(['branch_a/b'])
248
        tree_a.add('b')
249
        tree_a.commit('commit b')
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
250
        # reset parent
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
251
        parent = branch_b.get_parent()
252
        branch_b.set_parent(None)
253
        self.assertEqual(None, branch_b.get_parent())
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
254
        # test pull for failure without parent set
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
255
        os.chdir('branch_b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
256
        out = self.run_bzr('pull', retcode=3)
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
257
        self.assertEqual(out,
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
258
                ('','bzr: ERROR: No pull location known or specified.\n'))
259
        # test implicit --remember when no parent set, this pull conflicts
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
260
        self.build_tree(['d'])
261
        tree_b.add('d')
262
        tree_b.commit('commit d')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
263
        out = self.run_bzr('pull ../branch_a', retcode=3)
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
264
        self.assertEqual(out,
2221.5.13 by Dmitry Vasiliev
Fixed expected message in test
265
                ('','bzr: ERROR: These branches have diverged.'
4297.3.3 by Jelmer Vernooij
Fix pull --remember test.
266
                    ' Use the missing command to see how.\n'
267
                    'Use the merge command to reconcile them.\n'))
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
268
        self.assertEqual(branch_b.get_parent(), parent)
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
269
        # test implicit --remember after resolving previous failure
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
270
        uncommit(branch=branch_b, tree=tree_b)
271
        transport.delete('branch_b/d')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
272
        self.run_bzr('pull')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
273
        self.assertEqual(branch_b.get_parent(), parent)
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
274
        # test explicit --remember
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
275
        self.run_bzr('pull ../branch_c --remember')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
276
        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
277
                          branch_c.bzrdir.root_transport.base)
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
278
279
    def test_pull_bundle(self):
280
        from bzrlib.testament import Testament
281
        # Build up 2 trees and prepare for a pull
282
        tree_a = self.make_branch_and_tree('branch_a')
283
        f = open('branch_a/a', 'wb')
284
        f.write('hello')
285
        f.close()
286
        tree_a.add('a')
287
        tree_a.commit('message')
288
289
        tree_b = tree_a.bzrdir.sprout('branch_b').open_workingtree()
290
291
        # Make a change to 'a' that 'b' can pull
292
        f = open('branch_a/a', 'wb')
293
        f.write('hey there')
294
        f.close()
295
        tree_a.commit('message')
296
297
        # Create the bundle for 'b' to pull
298
        os.chdir('branch_a')
2654.3.1 by Aaron Bentley
Rename submit to send, make -o required, support -o- for stdout
299
        self.run_bzr('bundle ../branch_b -o ../bundle')
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
300
301
        os.chdir('../branch_b')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
302
        out, err = self.run_bzr('pull ../bundle')
2220.2.39 by Martin Pool
Pull also merges tags and warns if they conflict
303
        self.assertEqual(out,
304
                         'Now on revision 2.\n')
305
        self.assertEqual(err,
306
                ' M  a\nAll changes applied successfully.\n')
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
307
308
        self.assertEqualDiff(tree_a.branch.revision_history(),
309
                             tree_b.branch.revision_history())
310
1908.7.6 by Robert Collins
Deprecate WorkingTree.last_revision.
311
        testament_a = Testament.from_revision(tree_a.branch.repository,
312
                                              tree_a.get_parent_ids()[0])
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
313
        testament_b = Testament.from_revision(tree_b.branch.repository,
1908.7.6 by Robert Collins
Deprecate WorkingTree.last_revision.
314
                                              tree_b.get_parent_ids()[0])
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
315
        self.assertEqualDiff(testament_a.as_text(),
316
                             testament_b.as_text())
317
318
        # 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.
319
        out, err = self.run_bzr('pull ../bundle')
2220.2.39 by Martin Pool
Pull also merges tags and warns if they conflict
320
        self.assertEqual(err, '')
321
        self.assertEqual(out, 'No revisions to pull.\n')
1551.17.2 by Aaron Bentley
Stop showing deltas in pull -v output
322
323
    def test_pull_verbose_no_files(self):
324
        """Pull --verbose should not list modified files"""
325
        tree_a = self.make_branch_and_tree('tree_a')
326
        self.build_tree(['tree_a/foo'])
327
        tree_a.add('foo')
328
        tree_a.commit('bar')
329
        tree_b = self.make_branch_and_tree('tree_b')
330
        out = self.run_bzr('pull --verbose -d tree_b tree_a')[0]
331
        self.assertContainsRe(out, 'bar')
332
        self.assertNotContainsRe(out, 'added:')
333
        self.assertNotContainsRe(out, 'foo')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
334
335
    def test_pull_quiet(self):
336
        """Check that bzr pull --quiet does not print anything"""
337
        tree_a = self.make_branch_and_tree('tree_a')
338
        self.build_tree(['tree_a/foo'])
339
        tree_a.add('foo')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
340
        revision_id = tree_a.commit('bar')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
341
        tree_b = tree_a.bzrdir.sprout('tree_b').open_workingtree()
342
        out, err = self.run_bzr('pull --quiet -d tree_b')
343
        self.assertEqual(out, '')
344
        self.assertEqual(err, '')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
345
        self.assertEqual(tree_b.last_revision(), revision_id)
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
346
        self.build_tree(['tree_a/moo'])
347
        tree_a.add('moo')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
348
        revision_id = tree_a.commit('quack')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
349
        out, err = self.run_bzr('pull --quiet -d tree_b')
350
        self.assertEqual(out, '')
351
        self.assertEqual(err, '')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
352
        self.assertEqual(tree_b.last_revision(), revision_id)
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
353
3251.4.12 by Aaron Bentley
Updates from review
354
    def test_pull_from_directory_service(self):
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
355
        source = self.make_branch_and_tree('source')
356
        source.commit('commit 1')
357
        target = source.bzrdir.sprout('target').open_workingtree()
358
        source_last = source.commit('commit 2')
359
        class FooService(object):
360
            """A directory service that always returns source"""
361
362
            def look_up(self, name, url):
363
                return 'source'
3251.4.12 by Aaron Bentley
Updates from review
364
        directories.register('foo:', FooService, 'Testing directory service')
4985.2.1 by Vincent Ladeuil
Deploy addAttrCleanup on the whole test suite.
365
        self.addCleanup(directories.remove, 'foo:')
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
366
        self.run_bzr('pull foo:bar -d target')
367
        self.assertEqual(source_last, target.last_revision())
3848.1.1 by Aaron Bentley
Use default log format in pull -v
368
369
    def test_pull_verbose_defaults_to_long(self):
370
        tree = self.example_branch('source')
371
        target = self.make_branch_and_tree('target')
372
        out = self.run_bzr('pull -v source -d target')[0]
373
        self.assertContainsRe(out,
374
                              r'revno: 1\ncommitter: .*\nbranch nick: source')
3848.1.5 by Aaron Bentley
Updates from review
375
        self.assertNotContainsRe(out, r'\n {4}1 .*\n {6}setup\n')
3848.1.1 by Aaron Bentley
Use default log format in pull -v
376
377
    def test_pull_verbose_uses_default_log(self):
378
        tree = self.example_branch('source')
379
        target = self.make_branch_and_tree('target')
3848.1.2 by Aaron Bentley
Make test stricter
380
        target_config = target.branch.get_config()
381
        target_config.set_user_option('log_format', 'short')
3848.1.1 by Aaron Bentley
Use default log format in pull -v
382
        out = self.run_bzr('pull -v source -d target')[0]
383
        self.assertContainsRe(out, r'\n {4}1 .*\n {6}setup\n')
3848.1.5 by Aaron Bentley
Updates from review
384
        self.assertNotContainsRe(
385
            out, r'revno: 1\ncommitter: .*\nbranch nick: source')
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
386
387
    def test_pull_smart_stacked_streaming_acceptance(self):
4419.1.6 by Andrew Bennetts
Add comments requested by Martin's review.
388
        """'bzr pull -r 123' works on stacked, smart branches, even when the
389
        revision specified by the revno is only present in the fallback
390
        repository.
391
392
        See <https://launchpad.net/bugs/380314>
393
        """
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
394
        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.
395
        # Make a stacked-on branch with two commits so that the
396
        # revision-history can't be determined just by looking at the parent
397
        # field in the revision in the stacked repo.
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
398
        parent = self.make_branch_and_tree('parent', format='1.9')
399
        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.
400
        parent.commit(message='second commit')
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
401
        local = parent.bzrdir.sprout('local').open_workingtree()
402
        local.commit(message='local commit')
403
        local.branch.create_clone_on_transport(
404
            self.get_transport('stacked'), stacked_on=self.get_url('parent'))
405
        empty = self.make_branch_and_tree('empty', format='1.9')
406
        self.reset_smart_call_log()
407
        self.run_bzr(['pull', '-r', '1', self.get_url('stacked')],
408
            working_dir='empty')
409
        # This figure represent the amount of work to perform this use case. It
410
        # is entirely ok to reduce this number if a test fails due to rpc_count
411
        # being too low. If rpc_count increases, more network roundtrips have
412
        # become necessary for this use case. Please do not adjust this number
413
        # 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.
414
        self.assertLength(18, self.hpss_calls)
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
415
        remote = Branch.open('stacked')
416
        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
417
    
418
    def test_pull_cross_format_warning(self):
419
        """You get a warning for probably slow cross-format pulls.
420
        """
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
421
        # 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
422
        from_tree = self.make_branch_and_tree('from', format='2a')
423
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
424
        from_tree.commit(message='first commit')
425
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
426
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
427
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
428
429
    def test_pull_cross_format_warning_no_IDS(self):
430
        """You get a warning for probably slow cross-format pulls.
431
        """
432
        # this simulates what would happen across the network, where
433
        # interdifferingserializer is not active
434
435
        debug.debug_flags.add('IDS_never')
436
        # TestCase take care of restoring them
437
438
        from_tree = self.make_branch_and_tree('from', format='2a')
439
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
440
        from_tree.commit(message='first commit')
441
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
442
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
443
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
444
445
    def test_pull_cross_format_from_network(self):
446
        self.setup_smart_server_with_call_log()
447
        from_tree = self.make_branch_and_tree('from', format='2a')
448
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
449
        self.assertIsInstance(from_tree.branch, remote.RemoteBranch)
450
        from_tree.commit(message='first commit')
451
        out, err = self.run_bzr(['pull', '-d', 'to',
452
            from_tree.branch.bzrdir.root_transport.base])
453
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
454
            "(?m)Doing on-the-fly conversion")
4988.9.2 by Jelmer Vernooij
Add warning when attempting to fetch into experimental formats.
455
456
    def test_pull_to_experimental_format_warning(self):
457
        """You get a warning for pulling into experimental formats.
458
        """
459
        from_tree = self.make_branch_and_tree('from', format='development-subtree')
460
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
461
        from_tree.commit(message='first commit')
462
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
463
        self.assertContainsRe(err,
464
            "(?m)Fetching into experimental format")
465
466
    def test_pull_cross_to_experimental_format_warning(self):
467
        """You get a warning for pulling into experimental formats.
468
        """
469
        from_tree = self.make_branch_and_tree('from', format='2a')
470
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
471
        from_tree.commit(message='first commit')
472
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
473
        self.assertContainsRe(err,
474
            "(?m)Fetching into experimental format")
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
475
476
    def test_pull_show_base(self):
477
        """bzr pull supports --show-base
478
479
        see https://bugs.launchpad.net/bzr/+bug/202374"""
480
        # create two trees with conflicts, setup conflict, check that
481
        # conflicted file looks correct
482
        a_tree = self.example_branch('a')
483
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
484
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
485
        f = open(pathjoin('a', 'hello'),'wt')
486
        f.write('fee')
487
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
488
        a_tree.commit('fee')
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
489
490
        f = open(pathjoin('b', 'hello'),'wt')
491
        f.write('fie')
492
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
493
494
        out,err=self.run_bzr(['pull','-d','b','a','--show-base'])
495
496
        # check for message here
497
        self.assertEqual(err,
498
                         ' M  hello\nText conflict in hello\n1 conflicts encountered.\n')
499
500
        self.assertEqualDiff('<<<<<<< TREE\n'
501
                             'fie||||||| BASE-REVISION\n'
502
                             'foo=======\n'
503
                             'fee>>>>>>> MERGE-SOURCE\n',
504
                             open(pathjoin('b', 'hello')).read())
505
506
    def test_pull_show_base_working_tree_only(self):
507
        """--show-base only allowed if there's a working tree
508
509
        see https://bugs.launchpad.net/bzr/+bug/202374"""
510
        # create a branch, see that --show-base fails
511
        self.make_branch('from')
512
        self.make_branch('to')
513
        out=self.run_bzr(['pull','-d','to','from','--show-base'],retcode=3)
514
        self.assertEqual(out,
515
                         ('','bzr: ERROR: Need working tree for --show-base.\n'))
516
5616.6.1 by Jelmer Vernooij
Exit with 1 if there were tag conflicts during pull.
517
    def test_pull_tag_conflicts(self):
518
        """pulling tags with conflicts will change the exit code"""
519
        # create a branch, see that --show-base fails
520
        from_tree = self.make_branch_and_tree('from')
521
        from_tree.branch.tags.set_tag("mytag", "somerevid")
522
        to_tree = self.make_branch_and_tree('to')
523
        to_tree.branch.tags.set_tag("mytag", "anotherrevid")
524
        out = self.run_bzr(['pull','-d','to','from'],retcode=1)
525
        self.assertEqual(out,
526
            ('No revisions to pull.\nConflicting tags:\n    mytag\n', ''))