/brz/remove-bazaar

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