/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')
6165.4.7 by Jelmer Vernooij
More fixes.
56
        base_rev = a_tree.branch.last_revision()
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
57
        os.chdir('a')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
58
        self.run_bzr('pull', retcode=3)
59
        self.run_bzr('missing', retcode=3)
60
        self.run_bzr('missing .')
61
        self.run_bzr('missing')
1666.1.5 by Robert Collins
Merge bound branch test performance improvements.
62
        # this will work on windows because we check for the same branch
63
        # 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
64
        self.run_bzr('pull')
65
        self.run_bzr('pull /', retcode=3)
1185.31.31 by John Arbash Meinel
avoiding 'bzr pull .' means all tests pass under cygwin
66
        if sys.platform not in ('win32', 'cygwin'):
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
67
            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)
68
69
        os.chdir('..')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
70
        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)
71
        os.chdir('b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
72
        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)
73
        os.mkdir('subdir')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
74
        b_tree.add('subdir')
6165.4.7 by Jelmer Vernooij
More fixes.
75
        new_rev = b_tree.commit(message='blah', allow_pointless=True)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
76
77
        os.chdir('..')
78
        a = Branch.open('a')
79
        b = Branch.open('b')
6165.4.7 by Jelmer Vernooij
More fixes.
80
        self.assertEqual(a.last_revision(), base_rev)
81
        self.assertEqual(b.last_revision(), new_rev)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
82
83
        os.chdir('a')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
84
        self.run_bzr('pull ../b')
6165.4.6 by Jelmer Vernooij
Avoid more uses of revision_history.
85
        self.assertEqual(a.last_revision(), b.last_revision())
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
86
        a_tree.commit(message='blah2', allow_pointless=True)
87
        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)
88
        # no overwrite
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
89
        os.chdir('../b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
90
        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)
91
        os.chdir('..')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
92
        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)
93
        os.chdir('overwriteme')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
94
        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)
95
        overwritten = Branch.open('.')
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
96
        self.assertEqual(overwritten.last_revision(),
97
                         a.last_revision())
2738.2.6 by Daniel Watkins
Now use internal merging.
98
        a_tree.merge_from_branch(b_tree.branch)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
99
        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)
100
        os.chdir('../b/subdir')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
101
        self.run_bzr('pull ../../a')
6165.4.1 by Jelmer Vernooij
Avoid using revision_history.
102
        self.assertEqual(a.last_revision(), b.last_revision())
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
103
        sub_tree = WorkingTree.open_containing('.')[0]
104
        sub_tree.commit(message="blah5", allow_pointless=True)
105
        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)
106
        os.chdir('..')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
107
        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)
108
        os.chdir('../a')
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
109
        a_tree.commit(message="blah7", allow_pointless=True)
110
        a_tree.merge_from_branch(b_tree.branch)
111
        a_tree.commit(message="blah8", allow_pointless=True)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
112
        self.run_bzr('pull ../b')
113
        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)
114
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
115
    def test_pull_dash_d(self):
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
116
        self.example_branch('a')
117
        self.make_branch_and_tree('b')
118
        self.make_branch_and_tree('c')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
119
        # pull into that branch
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
120
        self.run_bzr('pull -d b a')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
121
        # pull into a branch specified by a url
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
122
        c_url = urlutils.local_path_to_url('c')
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
123
        self.assertStartsWith(c_url, 'file://')
2738.2.3 by Daniel Watkins
Fixed jam's concerns.
124
        self.run_bzr(['pull', '-d', c_url, 'a'])
2220.2.9 by Martin Pool
Add specific tests for push -d and pull -d
125
1185.76.2 by Erik Bågfors
test for pull --revision
126
    def test_pull_revision(self):
127
        """Pull some changes from one branch to another."""
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
128
        a_tree = self.example_branch('a')
129
        self.build_tree_contents([
130
            ('a/hello2',   'foo'),
131
            ('a/goodbye2', 'baz')])
132
        a_tree.add('hello2')
133
        a_tree.commit(message="setup")
134
        a_tree.add('goodbye2')
135
        a_tree.commit(message="setup")
136
137
        b_tree = a_tree.bzrdir.sprout('b',
138
                   revision_id=a_tree.branch.get_rev_id(1)).open_workingtree()
1185.76.2 by Erik Bågfors
test for pull --revision
139
        os.chdir('b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
140
        self.run_bzr('pull -r 2')
1185.76.2 by Erik Bågfors
test for pull --revision
141
        a = Branch.open('../a')
142
        b = Branch.open('.')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
143
        self.assertEqual(a.revno(),4)
144
        self.assertEqual(b.revno(),2)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
145
        self.run_bzr('pull -r 3')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
146
        self.assertEqual(b.revno(),3)
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
147
        self.run_bzr('pull -r 4')
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
148
        self.assertEqual(a.last_revision(), b.last_revision())
1185.76.2 by Erik Bågfors
test for pull --revision
149
5535.3.28 by Andrew Bennetts
Implement fetching tags during branch pull. Needs more tests.
150
    def test_pull_tags(self):
151
        """Tags are updated by pull, and revisions named in those tags are
152
        fetched.
153
        """
154
        # Make a source, sprout a target off it
155
        builder = self.make_branch_builder('source')
5651.5.3 by Andrew Bennetts
Use new fixture in more tests.
156
        source = fixtures.build_branch_with_non_ancestral_rev(builder)
6015.15.7 by John Arbash Meinel
Fix the 11 tests that still failed.
157
        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.
158
        target_bzrdir = source.bzrdir.sprout('target')
159
        source.tags.set_tag('tag-a', 'rev-2')
160
        # Pull from source
161
        self.run_bzr('pull -d target source')
162
        target = target_bzrdir.open_branch()
163
        # The tag is present, and so is its revision.
164
        self.assertEqual('rev-2', target.tags.lookup_tag('tag-a'))
165
        target.repository.get_revision('rev-2')
166
1185.50.7 by John Arbash Meinel
Fix broken test from refactoring blackbox/test_pull
167
    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)
168
        # Make sure pull --overwrite overwrites
169
        # even if the target branch has merged
170
        # everything already.
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
171
        a_tree = self.make_branch_and_tree('a')
172
        self.build_tree_contents([('a/foo', 'original\n')])
173
        a_tree.add('foo')
174
        a_tree.commit(message='initial commit')
175
176
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
177
178
        self.build_tree_contents([('a/foo', 'changed\n')])
179
        a_tree.commit(message='later change')
180
181
        self.build_tree_contents([('a/foo', 'a third change')])
182
        a_tree.commit(message='a third change')
183
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
184
        self.assertEqual(a_tree.branch.last_revision_info()[0], 3)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
185
186
        b_tree.merge_from_branch(a_tree.branch)
187
        b_tree.commit(message='merge')
188
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
189
        self.assertEqual(b_tree.branch.last_revision_info()[0], 2)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
190
191
        os.chdir('b')
192
        self.run_bzr('pull --overwrite ../a')
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
193
        (last_revinfo_b) = b_tree.branch.last_revision_info()
194
        self.assertEqual(last_revinfo_b[0], 3)
195
        self.assertEqual(last_revinfo_b[1], a_tree.branch.last_revision())
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
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
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
213
        self.assertEqual(a_tree.branch.last_revision_info()[0], 3)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
214
215
        b_tree.merge_from_branch(a_tree.branch)
216
        b_tree.commit(message='merge')
217
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
218
        self.assertEqual(b_tree.branch.last_revision_info()[0], 2)
2664.11.2 by Daniel Watkins
tests.blackbox.test_pull now uses internals where appropriate.
219
220
        self.build_tree_contents([('a/foo', 'a fourth change\n')])
221
        a_tree.commit(message='a fourth change')
222
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
223
        rev_info_a = a_tree.branch.last_revision_info()
6165.4.7 by Jelmer Vernooij
More fixes.
224
        self.assertEqual(rev_info_a[0], 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')
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
230
        rev_info_b = b_tree.branch.last_revision_info()
231
        self.assertEqual(rev_info_b[0], 4)
232
        self.assertEqual(rev_info_b, rev_info_a)
1185.50.5 by John Arbash Meinel
pull --overwrite should always overwrite, not just if diverged. (Test case from Robey Pointer)
233
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
234
    def test_pull_remember(self):
235
        """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.
236
        transport = self.get_transport()
237
        tree_a = self.make_branch_and_tree('branch_a')
238
        branch_a = tree_a.branch
239
        self.build_tree(['branch_a/a'])
240
        tree_a.add('a')
241
        tree_a.commit('commit a')
1666.1.4 by Robert Collins
* 'Metadir' is now the default disk format. This improves behaviour in
242
        tree_b = branch_a.bzrdir.sprout('branch_b').open_workingtree()
243
        branch_b = tree_b.branch
244
        tree_c = branch_a.bzrdir.sprout('branch_c').open_workingtree()
245
        branch_c = tree_c.branch
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
246
        self.build_tree(['branch_a/b'])
247
        tree_a.add('b')
248
        tree_a.commit('commit b')
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
249
        # reset parent
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
250
        parent = branch_b.get_parent()
251
        branch_b.set_parent(None)
252
        self.assertEqual(None, branch_b.get_parent())
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
253
        # test pull for failure without parent set
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
254
        os.chdir('branch_b')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
255
        out = self.run_bzr('pull', retcode=3)
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
256
        self.assertEqual(out,
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
257
                ('','bzr: ERROR: No pull location known or specified.\n'))
258
        # test implicit --remember when no parent set, this pull conflicts
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
259
        self.build_tree(['d'])
260
        tree_b.add('d')
261
        tree_b.commit('commit d')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
262
        out = self.run_bzr('pull ../branch_a', retcode=3)
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
263
        self.assertEqual(out,
2221.5.13 by Dmitry Vasiliev
Fixed expected message in test
264
                ('','bzr: ERROR: These branches have diverged.'
4297.3.3 by Jelmer Vernooij
Fix pull --remember test.
265
                    ' Use the missing command to see how.\n'
266
                    'Use the merge command to reconcile them.\n'))
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
267
        self.assertEqual(branch_b.get_parent(), parent)
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
268
        # test implicit --remember after resolving previous failure
1614.2.16 by Olaf Conradi
Modified blackbox test cases to use bzrlib API.
269
        uncommit(branch=branch_b, tree=tree_b)
270
        transport.delete('branch_b/d')
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
271
        self.run_bzr('pull')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
272
        self.assertEqual(branch_b.get_parent(), parent)
1614.2.8 by Olaf Conradi
Added testcases for using pull with --remember. Moved remember code to
273
        # test explicit --remember
2530.3.1 by Martin Pool
Cleanup old variations on run_bzr in the test suite
274
        self.run_bzr('pull ../branch_c --remember')
2738.2.4 by Daniel Watkins
Changed assertEquals to assertEqual.
275
        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
276
                          branch_c.bzrdir.root_transport.base)
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
277
278
    def test_pull_bundle(self):
279
        from bzrlib.testament import Testament
280
        # Build up 2 trees and prepare for a pull
281
        tree_a = self.make_branch_and_tree('branch_a')
282
        f = open('branch_a/a', 'wb')
283
        f.write('hello')
284
        f.close()
285
        tree_a.add('a')
286
        tree_a.commit('message')
287
288
        tree_b = tree_a.bzrdir.sprout('branch_b').open_workingtree()
289
290
        # Make a change to 'a' that 'b' can pull
291
        f = open('branch_a/a', 'wb')
292
        f.write('hey there')
293
        f.close()
294
        tree_a.commit('message')
295
296
        # Create the bundle for 'b' to pull
297
        os.chdir('branch_a')
2654.3.1 by Aaron Bentley
Rename submit to send, make -o required, support -o- for stdout
298
        self.run_bzr('bundle ../branch_b -o ../bundle')
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
299
300
        os.chdir('../branch_b')
2552.2.3 by Vincent Ladeuil
Deprecate the varargs syntax and fix the tests.
301
        out, err = self.run_bzr('pull ../bundle')
2220.2.39 by Martin Pool
Pull also merges tags and warns if they conflict
302
        self.assertEqual(out,
303
                         'Now on revision 2.\n')
304
        self.assertEqual(err,
305
                ' M  a\nAll changes applied successfully.\n')
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
306
6165.4.4 by Jelmer Vernooij
Avoid .revision_history().
307
        self.assertEqualDiff(tree_a.branch.last_revision(),
308
                             tree_b.branch.last_revision())
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
309
1908.7.6 by Robert Collins
Deprecate WorkingTree.last_revision.
310
        testament_a = Testament.from_revision(tree_a.branch.repository,
311
                                              tree_a.get_parent_ids()[0])
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
312
        testament_b = Testament.from_revision(tree_b.branch.repository,
1908.7.6 by Robert Collins
Deprecate WorkingTree.last_revision.
313
                                              tree_b.get_parent_ids()[0])
1711.3.3 by John Arbash Meinel
Allow pull to use a bundle as a target,
314
        self.assertEqualDiff(testament_a.as_text(),
315
                             testament_b.as_text())
316
317
        # 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.
318
        out, err = self.run_bzr('pull ../bundle')
2220.2.39 by Martin Pool
Pull also merges tags and warns if they conflict
319
        self.assertEqual(err, '')
6112.4.1 by Jelmer Vernooij
Show how many tags have been updated in bzr pull.
320
        self.assertEqual(out, 'No revisions or tags to pull.\n')
1551.17.2 by Aaron Bentley
Stop showing deltas in pull -v output
321
322
    def test_pull_verbose_no_files(self):
323
        """Pull --verbose should not list modified files"""
324
        tree_a = self.make_branch_and_tree('tree_a')
325
        self.build_tree(['tree_a/foo'])
326
        tree_a.add('foo')
327
        tree_a.commit('bar')
328
        tree_b = self.make_branch_and_tree('tree_b')
329
        out = self.run_bzr('pull --verbose -d tree_b tree_a')[0]
330
        self.assertContainsRe(out, 'bar')
331
        self.assertNotContainsRe(out, 'added:')
332
        self.assertNotContainsRe(out, 'foo')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
333
334
    def test_pull_quiet(self):
335
        """Check that bzr pull --quiet does not print anything"""
336
        tree_a = self.make_branch_and_tree('tree_a')
337
        self.build_tree(['tree_a/foo'])
338
        tree_a.add('foo')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
339
        revision_id = tree_a.commit('bar')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
340
        tree_b = tree_a.bzrdir.sprout('tree_b').open_workingtree()
341
        out, err = self.run_bzr('pull --quiet -d tree_b')
342
        self.assertEqual(out, '')
343
        self.assertEqual(err, '')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
344
        self.assertEqual(tree_b.last_revision(), revision_id)
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
345
        self.build_tree(['tree_a/moo'])
346
        tree_a.add('moo')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
347
        revision_id = tree_a.commit('quack')
3200.1.1 by James Westby
Make pull --quiet more quiet. Fixes #185907.
348
        out, err = self.run_bzr('pull --quiet -d tree_b')
349
        self.assertEqual(out, '')
350
        self.assertEqual(err, '')
3200.1.2 by James Westby
Check that the pull succeeds even when printing nothing.
351
        self.assertEqual(tree_b.last_revision(), revision_id)
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
352
3251.4.12 by Aaron Bentley
Updates from review
353
    def test_pull_from_directory_service(self):
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
354
        source = self.make_branch_and_tree('source')
355
        source.commit('commit 1')
356
        target = source.bzrdir.sprout('target').open_workingtree()
357
        source_last = source.commit('commit 2')
358
        class FooService(object):
359
            """A directory service that always returns source"""
360
361
            def look_up(self, name, url):
362
                return 'source'
3251.4.12 by Aaron Bentley
Updates from review
363
        directories.register('foo:', FooService, 'Testing directory service')
4985.2.1 by Vincent Ladeuil
Deploy addAttrCleanup on the whole test suite.
364
        self.addCleanup(directories.remove, 'foo:')
3251.4.10 by Aaron Bentley
Pull of launchpad locations works (abentley, #181945)
365
        self.run_bzr('pull foo:bar -d target')
366
        self.assertEqual(source_last, target.last_revision())
3848.1.1 by Aaron Bentley
Use default log format in pull -v
367
368
    def test_pull_verbose_defaults_to_long(self):
369
        tree = self.example_branch('source')
370
        target = self.make_branch_and_tree('target')
371
        out = self.run_bzr('pull -v source -d target')[0]
372
        self.assertContainsRe(out,
373
                              r'revno: 1\ncommitter: .*\nbranch nick: source')
3848.1.5 by Aaron Bentley
Updates from review
374
        self.assertNotContainsRe(out, r'\n {4}1 .*\n {6}setup\n')
3848.1.1 by Aaron Bentley
Use default log format in pull -v
375
376
    def test_pull_verbose_uses_default_log(self):
377
        tree = self.example_branch('source')
378
        target = self.make_branch_and_tree('target')
3848.1.2 by Aaron Bentley
Make test stricter
379
        target_config = target.branch.get_config()
380
        target_config.set_user_option('log_format', 'short')
3848.1.1 by Aaron Bentley
Use default log format in pull -v
381
        out = self.run_bzr('pull -v source -d target')[0]
382
        self.assertContainsRe(out, r'\n {4}1 .*\n {6}setup\n')
3848.1.5 by Aaron Bentley
Updates from review
383
        self.assertNotContainsRe(
384
            out, r'revno: 1\ncommitter: .*\nbranch nick: source')
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
385
6110.1.1 by John Arbash Meinel
Merge MvG's bugfix for #483661. Needs a couple small tweaks.
386
    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.
387
        self.setup_smart_server_with_call_log()
388
        parent = self.make_branch_and_tree('parent')
389
        parent.commit(message='first commit')
390
        child = parent.bzrdir.sprout('child').open_workingtree()
391
        child.commit(message='second commit')
392
        checkout = parent.branch.create_checkout('checkout')
393
        self.run_bzr(['pull', self.get_url('child')], working_dir='checkout')
394
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
395
    def test_pull_smart_stacked_streaming_acceptance(self):
4419.1.6 by Andrew Bennetts
Add comments requested by Martin's review.
396
        """'bzr pull -r 123' works on stacked, smart branches, even when the
397
        revision specified by the revno is only present in the fallback
398
        repository.
399
400
        See <https://launchpad.net/bugs/380314>
401
        """
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
402
        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.
403
        # Make a stacked-on branch with two commits so that the
404
        # revision-history can't be determined just by looking at the parent
405
        # field in the revision in the stacked repo.
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
406
        parent = self.make_branch_and_tree('parent', format='1.9')
407
        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.
408
        parent.commit(message='second commit')
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
409
        local = parent.bzrdir.sprout('local').open_workingtree()
410
        local.commit(message='local commit')
411
        local.branch.create_clone_on_transport(
412
            self.get_transport('stacked'), stacked_on=self.get_url('parent'))
413
        empty = self.make_branch_and_tree('empty', format='1.9')
414
        self.reset_smart_call_log()
415
        self.run_bzr(['pull', '-r', '1', self.get_url('stacked')],
416
            working_dir='empty')
417
        # This figure represent the amount of work to perform this use case. It
418
        # is entirely ok to reduce this number if a test fails due to rpc_count
419
        # being too low. If rpc_count increases, more network roundtrips have
420
        # become necessary for this use case. Please do not adjust this number
421
        # upwards without agreement from bzr's network support maintainers.
6015.15.7 by John Arbash Meinel
Fix the 11 tests that still failed.
422
        self.assertLength(19, self.hpss_calls)
4419.1.1 by Andrew Bennetts
Failing blackbox acceptance test for bug 380314.
423
        remote = Branch.open('stacked')
424
        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
425
    
426
    def test_pull_cross_format_warning(self):
427
        """You get a warning for probably slow cross-format pulls.
428
        """
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
429
        # 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
430
        from_tree = self.make_branch_and_tree('from', format='2a')
431
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
432
        from_tree.commit(message='first commit')
433
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
434
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
435
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
436
437
    def test_pull_cross_format_warning_no_IDS(self):
438
        """You get a warning for probably slow cross-format pulls.
439
        """
440
        # this simulates what would happen across the network, where
441
        # interdifferingserializer is not active
442
443
        debug.debug_flags.add('IDS_never')
444
        # TestCase take care of restoring them
445
446
        from_tree = self.make_branch_and_tree('from', format='2a')
447
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
448
        from_tree.commit(message='first commit')
449
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
450
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
451
            "(?m)Doing on-the-fly conversion")
4634.124.3 by Martin Pool
Give a warning from pulling across the network from a different format
452
453
    def test_pull_cross_format_from_network(self):
454
        self.setup_smart_server_with_call_log()
455
        from_tree = self.make_branch_and_tree('from', format='2a')
456
        to_tree = self.make_branch_and_tree('to', format='1.14-rich-root')
457
        self.assertIsInstance(from_tree.branch, remote.RemoteBranch)
458
        from_tree.commit(message='first commit')
459
        out, err = self.run_bzr(['pull', '-d', 'to',
460
            from_tree.branch.bzrdir.root_transport.base])
461
        self.assertContainsRe(err,
4634.124.4 by Martin Pool
Centralize warning about cross-format fetch into UIFactory
462
            "(?m)Doing on-the-fly conversion")
4988.9.2 by Jelmer Vernooij
Add warning when attempting to fetch into experimental formats.
463
464
    def test_pull_to_experimental_format_warning(self):
465
        """You get a warning for pulling into experimental formats.
466
        """
467
        from_tree = self.make_branch_and_tree('from', format='development-subtree')
468
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
469
        from_tree.commit(message='first commit')
470
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
471
        self.assertContainsRe(err,
472
            "(?m)Fetching into experimental format")
473
474
    def test_pull_cross_to_experimental_format_warning(self):
475
        """You get a warning for pulling into experimental formats.
476
        """
477
        from_tree = self.make_branch_and_tree('from', format='2a')
478
        to_tree = self.make_branch_and_tree('to', format='development-subtree')
479
        from_tree.commit(message='first commit')
480
        out, err = self.run_bzr(['pull', '-d', 'to', 'from'])
481
        self.assertContainsRe(err,
482
            "(?m)Fetching into experimental format")
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
483
484
    def test_pull_show_base(self):
485
        """bzr pull supports --show-base
486
487
        see https://bugs.launchpad.net/bzr/+bug/202374"""
488
        # create two trees with conflicts, setup conflict, check that
489
        # conflicted file looks correct
490
        a_tree = self.example_branch('a')
491
        b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
492
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
493
        f = open(pathjoin('a', 'hello'),'wt')
494
        f.write('fee')
495
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
496
        a_tree.commit('fee')
5430.7.2 by Rory Yorke
Changes as per Martin [gz]'s review.
497
498
        f = open(pathjoin('b', 'hello'),'wt')
499
        f.write('fie')
500
        f.close()
5430.7.1 by Rory Yorke
Added --show-base to pull and update (bug 202374).
501
502
        out,err=self.run_bzr(['pull','-d','b','a','--show-base'])
503
504
        # check for message here
505
        self.assertEqual(err,
506
                         ' M  hello\nText conflict in hello\n1 conflicts encountered.\n')
507
508
        self.assertEqualDiff('<<<<<<< TREE\n'
509
                             'fie||||||| BASE-REVISION\n'
510
                             'foo=======\n'
511
                             'fee>>>>>>> MERGE-SOURCE\n',
512
                             open(pathjoin('b', 'hello')).read())
513
514
    def test_pull_show_base_working_tree_only(self):
515
        """--show-base only allowed if there's a working tree
516
517
        see https://bugs.launchpad.net/bzr/+bug/202374"""
518
        # create a branch, see that --show-base fails
519
        self.make_branch('from')
520
        self.make_branch('to')
521
        out=self.run_bzr(['pull','-d','to','from','--show-base'],retcode=3)
522
        self.assertEqual(out,
523
                         ('','bzr: ERROR: Need working tree for --show-base.\n'))
524
5616.6.1 by Jelmer Vernooij
Exit with 1 if there were tag conflicts during pull.
525
    def test_pull_tag_conflicts(self):
526
        """pulling tags with conflicts will change the exit code"""
527
        # create a branch, see that --show-base fails
528
        from_tree = self.make_branch_and_tree('from')
529
        from_tree.branch.tags.set_tag("mytag", "somerevid")
530
        to_tree = self.make_branch_and_tree('to')
531
        to_tree.branch.tags.set_tag("mytag", "anotherrevid")
532
        out = self.run_bzr(['pull','-d','to','from'],retcode=1)
533
        self.assertEqual(out,
534
            ('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.
535
536
    def test_pull_tag_notification(self):
537
        """pulling tags with conflicts will change the exit code"""
538
        # create a branch, see that --show-base fails
539
        from_tree = self.make_branch_and_tree('from')
540
        from_tree.branch.tags.set_tag("mytag", "somerevid")
541
        to_tree = self.make_branch_and_tree('to')
542
        out = self.run_bzr(['pull', '-d', 'to', 'from'])
543
        self.assertEqual(out,
544
            ('1 tag(s) updated.\n', ''))
6156.1.1 by Jelmer Vernooij
Don't report all tags as changed when --overwrite is specified.
545
546
    def test_pull_tag_overwrite(self):
547
        """pulling tags with --overwrite only reports changed tags."""
548
        # create a branch, see that --show-base fails
549
        from_tree = self.make_branch_and_tree('from')
550
        from_tree.branch.tags.set_tag("mytag", "somerevid")
551
        to_tree = self.make_branch_and_tree('to')
552
        to_tree.branch.tags.set_tag("mytag", "somerevid")
553
        out = self.run_bzr(['pull', '--overwrite', '-d', 'to', 'from'])
554
        self.assertEqual(out,
555
            ('No revisions or tags to pull.\n', ''))