/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, '')
6112.4.1 by Jelmer Vernooij
Show how many tags have been updated in bzr pull.
321
        self.assertEqual(out, 'No revisions or tags 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', ''))
6112.4.1 by Jelmer Vernooij
Show how many tags have been updated in bzr pull.
536
537
    def test_pull_tag_notification(self):
538
        """pulling tags with conflicts will change the exit code"""
539
        # create a branch, see that --show-base fails
540
        from_tree = self.make_branch_and_tree('from')
541
        from_tree.branch.tags.set_tag("mytag", "somerevid")
542
        to_tree = self.make_branch_and_tree('to')
543
        out = self.run_bzr(['pull', '-d', 'to', 'from'])
544
        self.assertEqual(out,
545
            ('1 tag(s) updated.\n', ''))
6156.1.1 by Jelmer Vernooij
Don't report all tags as changed when --overwrite is specified.
546
547
    def test_pull_tag_overwrite(self):
548
        """pulling tags with --overwrite only reports changed tags."""
549
        # create a branch, see that --show-base fails
550
        from_tree = self.make_branch_and_tree('from')
551
        from_tree.branch.tags.set_tag("mytag", "somerevid")
552
        to_tree = self.make_branch_and_tree('to')
553
        to_tree.branch.tags.set_tag("mytag", "somerevid")
554
        out = self.run_bzr(['pull', '--overwrite', '-d', 'to', 'from'])
555
        self.assertEqual(out,
556
            ('No revisions or tags to pull.\n', ''))