1
# Copyright (C) 2005 by Canonical Ltd
1
# Copyright (C) 2005 Canonical Ltd
2
2
# -*- coding: utf-8 -*-
4
4
# This program is free software; you can redistribute it and/or modify
5
5
# it under the terms of the GNU General Public License as published by
6
6
# the Free Software Foundation; either version 2 of the License, or
7
7
# (at your option) any later version.
9
9
# This program is distributed in the hope that it will be useful,
10
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
12
# GNU General Public License for more details.
14
14
# You should have received a copy of the GNU General Public License
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
"""Black-box tests for bzr pull.
19
"""Black-box tests for bzr pull."""
25
24
from bzrlib.branch import Branch
26
from bzrlib.osutils import abspath
27
25
from bzrlib.tests.blackbox import ExternalBase
28
26
from bzrlib.uncommit import uncommit
49
47
self.runbzr('missing', retcode=3)
50
48
self.runbzr('missing .')
51
49
self.runbzr('missing')
52
if sys.platform not in ('win32', 'cygwin'):
53
# This is equivalent to doing "bzr pull ."
54
# Which means that bzr creates 2 branches grabbing
55
# the same location, and tries to pull.
56
# However, 2 branches mean 2 locks on the same file
57
# which ultimately implies a deadlock.
58
# (non windows platforms allow multiple locks on the
59
# same file by the same calling process)
50
# this will work on windows because we check for the same branch
51
# in pull - if it fails, it is a regression
61
53
self.runbzr('pull /', retcode=3)
62
54
if sys.platform not in ('win32', 'cygwin'):
63
55
self.runbzr('pull')
233
225
self.build_tree(['branch_a/a'])
235
227
tree_a.commit('commit a')
236
branch_b = branch_a.bzrdir.sprout('branch_b').open_branch()
237
tree_b = branch_b.bzrdir.open_workingtree()
238
branch_c = branch_a.bzrdir.sprout('branch_c').open_branch()
239
tree_c = branch_c.bzrdir.open_workingtree()
228
tree_b = branch_a.bzrdir.sprout('branch_b').open_workingtree()
229
branch_b = tree_b.branch
230
tree_c = branch_a.bzrdir.sprout('branch_c').open_workingtree()
231
branch_c = tree_c.branch
240
232
self.build_tree(['branch_a/b'])
242
234
tree_a.commit('commit b')
255
247
tree_b.commit('commit d')
256
248
out = self.runbzr('pull ../branch_a', retcode=3)
257
249
self.assertEquals(out,
258
('','bzr: ERROR: These branches have diverged. Try merge.\n'))
259
self.assertEquals(abspath(branch_b.get_parent()), abspath(parent))
250
('','bzr: ERROR: These branches have diverged. Use the merge command to reconcile them.\n'))
251
self.assertEquals(branch_b.get_parent(), parent)
260
252
# test implicit --remember after resolving previous failure
261
253
uncommit(branch=branch_b, tree=tree_b)
262
254
transport.delete('branch_b/d')
263
255
self.runbzr('pull')
264
self.assertEquals(abspath(branch_b.get_parent()), abspath(parent))
256
self.assertEquals(branch_b.get_parent(), parent)
265
257
# test explicit --remember
266
258
self.runbzr('pull ../branch_c --remember')
267
self.assertEquals(abspath(branch_b.get_parent()),
268
abspath(branch_c.bzrdir.root_transport.base))
259
self.assertEquals(branch_b.get_parent(),
260
branch_c.bzrdir.root_transport.base)
262
def test_pull_bundle(self):
263
from bzrlib.testament import Testament
264
# Build up 2 trees and prepare for a pull
265
tree_a = self.make_branch_and_tree('branch_a')
266
f = open('branch_a/a', 'wb')
270
tree_a.commit('message')
272
tree_b = tree_a.bzrdir.sprout('branch_b').open_workingtree()
274
# Make a change to 'a' that 'b' can pull
275
f = open('branch_a/a', 'wb')
278
tree_a.commit('message')
280
# Create the bundle for 'b' to pull
282
bundle_file = open('../bundle', 'wb')
283
bundle_file.write(self.run_bzr('bundle', '../branch_b')[0])
286
os.chdir('../branch_b')
287
output = self.run_bzr('pull', '../bundle')
288
self.assertEqual('', output[0])
289
self.assertEqual('All changes applied successfully.\n'
290
'1 revision(s) pulled.\n', output[1])
292
self.assertEqualDiff(tree_a.branch.revision_history(),
293
tree_b.branch.revision_history())
295
testament_a = Testament.from_revision(tree_a.branch.repository,
296
tree_a.get_parent_ids()[0])
297
testament_b = Testament.from_revision(tree_b.branch.repository,
298
tree_b.get_parent_ids()[0])
299
self.assertEqualDiff(testament_a.as_text(),
300
testament_b.as_text())
302
# it is legal to attempt to pull an already-merged bundle
303
output = self.run_bzr('pull', '../bundle')
304
self.assertEqual('', output[0])
305
self.assertEqual('0 revision(s) pulled.\n', output[1])