/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
5651.5.3 by Andrew Bennetts
Use new fixture in more tests.
32
from bzrlib.tests import (
33
    fixtures,
34
    TestCaseWithTransport,
35
    )
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
36
from bzrlib.uncommit import uncommit
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
37
from bzrlib.workingtree import WorkingTree
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
38
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
39
5283.4.5 by Martin Pool
Update remaining subclasses of ExternalBase
40
class TestPull(TestCaseWithTransport):
1185.50.7 by John Arbash Meinel
Fix broken test from refactoring blackbox/test_pull
41
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
42
    def example_branch(self, path='.'):
43
        tree = self.make_branch_and_tree(path)
44
        self.build_tree_contents([
2738.2.5 by Daniel Watkins
Now use pathjoin in test_pull.
45
            (pathjoin(path, 'hello'),   'foo'),
46
            (pathjoin(path, 'goodbye'), 'baz')])
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
47
        tree.add('hello')
48
        tree.commit(message='setup')
49
        tree.add('goodbye')
50
        tree.commit(message='setup')
51
        return tree
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
52
53
    def test_pull(self):
54
        """Pull changes from one branch to another."""
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
55
        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)
56
        os.chdir('a')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
57
        self.run_bzr('pull', retcode=3)
58
        self.run_bzr('missing', retcode=3)
59
        self.run_bzr('missing .')
60
        self.run_bzr('missing')
1666.1.5 by Robert Collins
Merge bound branch test performance improvements.
61
        # this will work on windows because we check for the same branch
62
        # 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
63
        self.run_bzr('pull')
64
        self.run_bzr('pull /', retcode=3)
1185.31.31 by John Arbash Meinel
avoiding 'bzr pull .' means all tests pass under cygwin
65
        if sys.platform not in ('win32', 'cygwin'):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
66
            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)
67
68
        os.chdir('..')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
69
        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)
70
        os.chdir('b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
71
        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)
72
        os.mkdir('subdir')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
73
        b_tree.add('subdir')
74
        b_tree.commit(message='blah', allow_pointless=True)
75
76
        os.chdir('..')
77
        a = Branch.open('a')
78
        b = Branch.open('b')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
79
        self.assertEqual(a.revision_history(), b.revision_history()[:-1])
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
80
81
        os.chdir('a')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
82
        self.run_bzr('pull ../b')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
83
        self.assertEqual(a.revision_history(), b.revision_history())
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
84
        a_tree.commit(message='blah2', allow_pointless=True)
85
        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)
86
        # no overwrite
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
87
        os.chdir('../b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
88
        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)
89
        os.chdir('..')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
90
        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)
91
        os.chdir('overwriteme')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
92
        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)
93
        overwritten = Branch.open('.')
94
        self.assertEqual(overwritten.revision_history(),
95
                         a.revision_history())
2738.2.6 by Daniel Watkins
Now use internal merging.
96
        a_tree.merge_from_branch(b_tree.branch)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
97
        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)
98
        os.chdir('../b/subdir')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
99
        self.run_bzr('pull ../../a')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
100
        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.
101
        sub_tree = WorkingTree.open_containing('.')[0]
102
        sub_tree.commit(message="blah5", allow_pointless=True)
103
        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)
104
        os.chdir('..')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
105
        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)
106
        os.chdir('../a')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
107
        a_tree.commit(message="blah7", allow_pointless=True)
108
        a_tree.merge_from_branch(b_tree.branch)
109
        a_tree.commit(message="blah8", allow_pointless=True)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
110
        self.run_bzr('pull ../b')
111
        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)
112
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
113
    def test_pull_dash_d(self):
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
114
        self.example_branch('a')
115
        self.make_branch_and_tree('b')
116
        self.make_branch_and_tree('c')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
117
        # pull into that branch
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
118
        self.run_bzr('pull -d b a')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
119
        # pull into a branch specified by a url
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
120
        c_url = urlutils.local_path_to_url('c')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
121
        self.assertStartsWith(c_url, 'file://')
2738.2.3 by Daniel Watkins
Fixed jam's concerns.
122
        self.run_bzr(['pull', '-d', c_url, 'a'])
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
123
1185.76.2 by Erik Bågfors
test for pull --revision
124
    def test_pull_revision(self):
125
        """Pull some changes from one branch to another."""
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
126
        a_tree = self.example_branch('a')
127
        self.build_tree_contents([
128
            ('a/hello2',   'foo'),
129
            ('a/goodbye2', 'baz')])
130
        a_tree.add('hello2')
131
        a_tree.commit(message="setup")
132
        a_tree.add('goodbye2')
133
        a_tree.commit(message="setup")
134
135
        b_tree = a_tree.bzrdir.sprout('b',
136
                   revision_id=a_tree.branch.get_rev_id(1)).open_workingtree()
1185.76.2 by Erik Bågfors
test for pull --revision
137
        os.chdir('b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
138
        self.run_bzr('pull -r 2')
1185.76.2 by Erik Bågfors
test for pull --revision
139
        a = Branch.open('../a')
140
        b = Branch.open('.')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
141
        self.assertEqual(a.revno(),4)
142
        self.assertEqual(b.revno(),2)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
143
        self.run_bzr('pull -r 3')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
144
        self.assertEqual(b.revno(),3)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
145
        self.run_bzr('pull -r 4')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
146
        self.assertEqual(a.revision_history(), b.revision_history())
1185.76.2 by Erik Bågfors
test for pull --revision
147
5535.3.28 by Andrew Bennetts
Implement fetching tags during branch pull. Needs more tests.
148
    def test_pull_tags(self):
149
        """Tags are updated by pull, and revisions named in those tags are
150
        fetched.
151
        """
152
        # Make a source, sprout a target off it
153
        builder = self.make_branch_builder('source')
5651.5.3 by Andrew Bennetts
Use new fixture in more tests.
154
        source = fixtures.build_branch_with_non_ancestral_rev(builder)
6015.15.7 by John Arbash Meinel
Fix the 11 tests that still failed.
155
        source.get_config().set_user_option('branch.fetch_tags', 'True')
5535.3.28 by Andrew Bennetts
Implement fetching tags during branch pull. Needs more tests.
156
        target_bzrdir = source.bzrdir.sprout('target')
157
        source.tags.set_tag('tag-a', 'rev-2')
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
6110.1.1 by John Arbash Meinel
Merge MvG's bugfix for #483661. Needs a couple small tweaks.
387
    def test_pull_smart_bound_branch(self):
6105.2.1 by Martin von Gagern
Added blackbox testcase for pull to bound branch over smart medium.
388
        self.setup_smart_server_with_call_log()
389
        parent = self.make_branch_and_tree('parent')
390
        parent.commit(message='first commit')
391
        child = parent.bzrdir.sprout('child').open_workingtree()
392
        child.commit(message='second commit')
393
        checkout = parent.branch.create_checkout('checkout')
394
        self.run_bzr(['pull', self.get_url('child')], working_dir='checkout')
395
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
396
    def test_pull_smart_stacked_streaming_acceptance(self):
4419.1.6 by Andrew Bennetts
Add comments requested by Martin's review.
397
        """'bzr pull -r 123' works on stacked, smart branches, even when the
398
        revision specified by the revno is only present in the fallback
399
        repository.
400
401
        See <https://launchpad.net/bugs/380314>
402
        """
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
403
        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.
404
        # Make a stacked-on branch with two commits so that the
405
        # revision-history can't be determined just by looking at the parent
406
        # field in the revision in the stacked repo.
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
407
        parent = self.make_branch_and_tree('parent', format='1.9')
408
        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.
409
        parent.commit(message='second commit')
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
410
        local = parent.bzrdir.sprout('local').open_workingtree()
411
        local.commit(message='local commit')
412
        local.branch.create_clone_on_transport(
413
            self.get_transport('stacked'), stacked_on=self.get_url('parent'))
414
        empty = self.make_branch_and_tree('empty', format='1.9')
415
        self.reset_smart_call_log()
416
        self.run_bzr(['pull', '-r', '1', self.get_url('stacked')],
417
            working_dir='empty')
418
        # This figure represent the amount of work to perform this use case. It
419
        # is entirely ok to reduce this number if a test fails due to rpc_count
420
        # being too low. If rpc_count increases, more network roundtrips have
421
        # become necessary for this use case. Please do not adjust this number
422
        # upwards without agreement from bzr's network support maintainers.
6015.15.7 by John Arbash Meinel
Fix the 11 tests that still failed.
423
        self.assertLength(19, self.hpss_calls)
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
424
        remote = Branch.open('stacked')
425
        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
426
    
427
    def test_pull_cross_format_warning(self):
428
        """You get a warning for probably slow cross-format pulls.
429
        """
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
430
        # 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
431
        from_tree = self.make_branch_and_tree('from', format='2a')
432
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
433
        from_tree.commit(message='first commit')
434
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
435
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
436
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
437
438
    def test_pull_cross_format_warning_no_IDS(self):
439
        """You get a warning for probably slow cross-format pulls.
440
        """
441
        # this simulates what would happen across the network, where
442
        # interdifferingserializer is not active
443
444
        debug.debug_flags.add('IDS_never')
445
        # TestCase take care of restoring them
446
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
        from_tree.commit(message='first commit')
450
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
451
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
452
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
453
454
    def test_pull_cross_format_from_network(self):
455
        self.setup_smart_server_with_call_log()
456
        from_tree = self.make_branch_and_tree('from', format='2a')
457
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
458
        self.assertIsInstance(from_tree.branch, remote.RemoteBranch)
459
        from_tree.commit(message='first commit')
460
        out, err = self.run_bzr(['pull', '-d', 'to',
461
            from_tree.branch.bzrdir.root_transport.base])
462
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
463
            "(?m)Doing on-the-fly conversion")
4988.9.2 by Jelmer Vernooij
Add warning when attempting to fetch into experimental formats.
464
465
    def test_pull_to_experimental_format_warning(self):
466
        """You get a warning for pulling into experimental formats.
467
        """
468
        from_tree = self.make_branch_and_tree('from', format='development-subtree')
469
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
470
        from_tree.commit(message='first commit')
471
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
472
        self.assertContainsRe(err,
473
            "(?m)Fetching into experimental format")
474
475
    def test_pull_cross_to_experimental_format_warning(self):
476
        """You get a warning for pulling into experimental formats.
477
        """
478
        from_tree = self.make_branch_and_tree('from', format='2a')
479
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
480
        from_tree.commit(message='first commit')
481
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
482
        self.assertContainsRe(err,
483
            "(?m)Fetching into experimental format")
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
484
485
    def test_pull_show_base(self):
486
        """bzr pull supports --show-base
487
488
        see https://bugs.launchpad.net/bzr/+bug/202374"""
489
        # create two trees with conflicts, setup conflict, check that
490
        # conflicted file looks correct
491
        a_tree = self.example_branch('a')
492
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
493
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
494
        f = open(pathjoin('a', 'hello'),'wt')
495
        f.write('fee')
496
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
497
        a_tree.commit('fee')
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
498
499
        f = open(pathjoin('b', 'hello'),'wt')
500
        f.write('fie')
501
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
502
503
        out,err=self.run_bzr(['pull','-d','b','a','--show-base'])
504
505
        # check for message here
506
        self.assertEqual(err,
507
                         ' M  hello\nText conflict in hello\n1 conflicts encountered.\n')
508
509
        self.assertEqualDiff('<<<<<<< TREE\n'
510
                             'fie||||||| BASE-REVISION\n'
511
                             'foo=======\n'
512
                             'fee>>>>>>> MERGE-SOURCE\n',
513
                             open(pathjoin('b', 'hello')).read())
514
515
    def test_pull_show_base_working_tree_only(self):
516
        """--show-base only allowed if there's a working tree
517
518
        see https://bugs.launchpad.net/bzr/+bug/202374"""
519
        # create a branch, see that --show-base fails
520
        self.make_branch('from')
521
        self.make_branch('to')
522
        out=self.run_bzr(['pull','-d','to','from','--show-base'],retcode=3)
523
        self.assertEqual(out,
524
                         ('','bzr: ERROR: Need working tree for --show-base.\n'))
525
5616.6.1 by Jelmer Vernooij
Exit with 1 if there were tag conflicts during pull.
526
    def test_pull_tag_conflicts(self):
527
        """pulling tags with conflicts will change the exit code"""
528
        # create a branch, see that --show-base fails
529
        from_tree = self.make_branch_and_tree('from')
530
        from_tree.branch.tags.set_tag("mytag", "somerevid")
531
        to_tree = self.make_branch_and_tree('to')
532
        to_tree.branch.tags.set_tag("mytag", "anotherrevid")
533
        out = self.run_bzr(['pull','-d','to','from'],retcode=1)
534
        self.assertEqual(out,
535
            ('No revisions to pull.\nConflicting tags:\n    mytag\n', ''))