1
# Copyright (C) 2007-2010 Canonical Ltd
1
# Copyright (C) 2007-2011 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
61
58
self.assertEqual(result.old_revid, 'M1')
62
59
self.assertEqual(result.new_revid, 'P2')
63
60
# and it can be treated as an integer for compatibility
64
self.assertEqual(int(result), 0)
61
self.assertEqual(self.applyDeprecated(
62
symbol_versioning.deprecated_in((2, 3, 0)),
66
66
def test_push_merged_indirect(self):
67
67
# it should be possible to do a push from one branch into another
114
114
self.assertRaises(errors.BoundBranchConnectionFailure,
115
115
other.branch.push, checkout.branch)
117
def test_push_new_tag_to_bound_branch(self):
118
master = self.make_branch('master')
119
bound = self.make_branch('bound')
122
except errors.UpgradeRequired:
123
raise tests.TestNotApplicable(
124
'Format does not support bound branches')
125
other = bound.bzrdir.sprout('other').open_branch()
127
other.tags.set_tag('new-tag', 'some-rev')
128
except errors.TagsNotSupported:
129
raise tests.TestNotApplicable('Format does not support tags')
131
self.assertEqual({'new-tag': 'some-rev'}, bound.tags.get_tag_dict())
132
self.assertEqual({'new-tag': 'some-rev'}, master.tags.get_tag_dict())
117
134
def test_push_uses_read_lock(self):
118
135
"""Push should only need a read lock on the source side."""
119
136
source = self.make_branch_and_tree('source')
170
187
self.assertEqual(tree.branch.last_revision(),
171
188
to_branch.last_revision())
190
def test_push_overwrite_with_older_mainline_rev(self):
191
"""Pushing an older mainline revision with overwrite.
193
This was <https://bugs.launchpad.net/bzr/+bug/386576>.
195
source = self.make_branch_and_tree('source')
196
target = self.make_branch('target')
198
source.commit('1st commit')
199
source.commit('2nd commit', rev_id='rev-2')
200
source.commit('3rd commit')
201
source.branch.push(target)
202
source.branch.push(target, stop_revision='rev-2', overwrite=True)
203
self.assertEqual('rev-2', target.last_revision())
173
205
def test_push_overwrite_of_non_tip_with_stop_revision(self):
174
206
"""Combining the stop_revision and overwrite options works.
186
218
source.branch.push(target, stop_revision='rev-2', overwrite=True)
187
219
self.assertEqual('rev-2', target.last_revision())
221
def test_push_repository_no_branch_doesnt_fetch_all_revs(self):
222
# See https://bugs.launchpad.net/bzr/+bug/465517
223
t = self.get_transport('target')
225
bzrdir = self.bzrdir_format.initialize_on_transport(t)
228
except errors.NotBranchError:
231
raise tests.TestNotApplicable('older formats can\'t have a repo'
234
source = self.make_branch_builder('source',
235
format=self.bzrdir_format)
236
except errors.UninitializableFormat:
237
raise tests.TestNotApplicable('cannot initialize this format')
238
source.start_series()
239
source.build_snapshot('A', None, [
240
('add', ('', 'root-id', 'directory', None))])
241
source.build_snapshot('B', ['A'], [])
242
source.build_snapshot('C', ['A'], [])
243
source.finish_series()
244
b = source.get_branch()
245
# Note: We can't read lock the source branch. Some formats take a write
246
# lock to 'set_push_location', which breaks
247
self.addCleanup(b.lock_write().unlock)
248
repo = bzrdir.create_repository()
249
# This means 'push the source branch into this dir'
250
bzrdir.push_branch(b)
251
self.addCleanup(repo.lock_read().unlock)
252
# We should have pushed 'C', but not 'B', since it isn't in the
254
self.assertEqual([('A',), ('C',)], sorted(repo.revisions.keys()))
189
256
def test_push_with_default_stacking_does_not_create_broken_branch(self):
190
257
"""Pushing a new standalone branch works even when there's a default
191
258
stacking policy at the destination.
194
261
default for the branch), and will be stacked when the repo format
195
262
allows (which means that the branch format isn't necessarly preserved).
197
if isinstance(self.branch_format, branch.BzrBranchFormat4):
264
if self.bzrdir_format.fixed_components:
198
265
raise tests.TestNotApplicable('Not a metadir format.')
199
266
if isinstance(self.branch_format, branch.BranchReferenceFormat):
200
267
# This test could in principle apply to BranchReferenceFormat, but
335
402
raise tests.TestNotApplicable(
336
403
'Does not apply when remote backing branch is also '
337
404
'a smart branch')
338
if isinstance(self.branch_format, branch.BzrBranchFormat4):
405
if not self.branch_format.supports_leaving_lock():
339
406
raise tests.TestNotApplicable(
340
'Branch format 4 is not usable via HPSS.')
407
'Branch format is not usable via HPSS.')
341
408
super(EmptyPushSmartEffortTests, self).setUp()
342
409
# Create a smart server that publishes whatever the backing VFS server