/brz/remove-bazaar

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