1
# Copyright (C) 2009, 2010 Canonical Ltd
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.
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.
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
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
"""Black-box tests for bzr dpush."""
30
from bzrlib.tests import (
35
from bzrlib.tests.blackbox import test_push
38
def load_tests(standard_tests, module, loader):
39
"""Multiply tests for the dpush command."""
40
result = loader.suiteClass()
42
# one for each king of change
43
changes_tests, remaining_tests = tests.split_suite_by_condition(
44
standard_tests, tests.condition_isinstance((
45
TestDpushStrictWithChanges,
49
dict(_changes_type= '_uncommitted_changes')),
51
dict(_changes_type= '_pending_merges')),
53
dict(_changes_type= '_out_of_sync_trees')),
55
tests.multiply_tests(changes_tests, changes_scenarios, result)
56
# No parametrization for the remaining tests
57
result.addTests(remaining_tests)
62
class TestDpush(tests.TestCaseWithTransport):
65
super(TestDpush, self).setUp()
66
test_foreign.register_dummy_foreign_for_test(self)
68
def make_dummy_builder(self, relpath):
69
builder = self.make_branch_builder(
70
relpath, format=test_foreign.DummyForeignVcsDirFormat())
71
builder.build_snapshot('revid', None,
72
[('add', ('', 'TREE_ROOT', 'directory', None)),
73
('add', ('foo', 'fooid', 'file', 'bar'))])
76
def test_dpush_native(self):
77
target_tree = self.make_branch_and_tree("dp")
78
source_tree = self.make_branch_and_tree("dc")
79
output, error = self.run_bzr("dpush -d dc dp", retcode=3)
80
self.assertEquals("", output)
81
self.assertContainsRe(error, 'in the same VCS, lossy push not necessary. Please use regular push.')
84
branch = self.make_dummy_builder('d').get_branch()
86
dc = branch.bzrdir.sprout('dc', force_new_repo=True)
87
self.build_tree(("dc/foo", "blaaaa"))
88
dc.open_workingtree().commit('msg')
90
script.run_script(self, """
92
2>Pushed up to revision 2.
96
def test_dpush_new(self):
97
b = self.make_dummy_builder('d').get_branch()
99
dc = b.bzrdir.sprout('dc', force_new_repo=True)
100
self.build_tree_contents([("dc/foofile", "blaaaa")])
101
dc_tree = dc.open_workingtree()
102
dc_tree.add("foofile")
103
dc_tree.commit("msg")
105
script.run_script(self, '''
107
2>Pushed up to revision 2.
113
def test_dpush_wt_diff(self):
114
b = self.make_dummy_builder('d').get_branch()
116
dc = b.bzrdir.sprout('dc', force_new_repo=True)
117
self.build_tree_contents([("dc/foofile", "blaaaa")])
118
dc_tree = dc.open_workingtree()
119
dc_tree.add("foofile")
120
newrevid = dc_tree.commit('msg')
122
self.build_tree_contents([("dc/foofile", "blaaaal")])
123
script.run_script(self, '''
124
$ bzr dpush -d dc d --no-strict
125
2>Pushed up to revision 2.
127
self.assertFileEqual("blaaaal", "dc/foofile")
128
# if the dummy vcs wasn't that dummy we could uncomment the line below
129
# self.assertFileEqual("blaaaa", "d/foofile")
130
script.run_script(self, '''
136
def test_diverged(self):
137
builder = self.make_dummy_builder('d')
139
b = builder.get_branch()
141
dc = b.bzrdir.sprout('dc', force_new_repo=True)
142
dc_tree = dc.open_workingtree()
144
self.build_tree_contents([("dc/foo", "bar")])
145
dc_tree.commit('msg1')
147
builder.build_snapshot('revid2', None,
148
[('modify', ('fooid', 'blie'))])
150
output, error = self.run_bzr("dpush -d dc d", retcode=3)
151
self.assertEquals(output, "")
152
self.assertContainsRe(error, "have diverged")
155
class TestDpushStrictMixin(object):
158
test_foreign.register_dummy_foreign_for_test(self)
159
# Create an empty branch where we will be able to push
160
self.foreign = self.make_branch(
161
'to', format=test_foreign.DummyForeignVcsDirFormat())
163
def set_config_push_strict(self, value):
164
# set config var (any of bazaar.conf, locations.conf, branch.conf
166
conf = self.tree.branch.get_config()
167
conf.set_user_option('dpush_strict', value)
169
_default_command = ['dpush', '../to']
172
class TestDpushStrictWithoutChanges(TestDpushStrictMixin,
173
test_push.TestPushStrictWithoutChanges):
176
test_push.TestPushStrictWithoutChanges.setUp(self)
177
TestDpushStrictMixin.setUp(self)
180
class TestDpushStrictWithChanges(TestDpushStrictMixin,
181
test_push.TestPushStrictWithChanges):
183
_changes_type = None # Set by load_tests
186
test_push.TestPushStrictWithChanges.setUp(self)
187
TestDpushStrictMixin.setUp(self)
189
def test_push_with_revision(self):
190
raise tests.TestNotApplicable('dpush does not handle --revision')