30
from bzrlib.tests import (
34
from bzrlib.tests.blackbox import test_push
37
def load_tests(standard_tests, module, loader):
38
"""Multiply tests for the dpush command."""
39
result = loader.suiteClass()
41
# one for each king of change
42
changes_tests, remaining_tests = tests.split_suite_by_condition(
43
standard_tests, tests.condition_isinstance((
44
TestDpushStrictWithChanges,
48
dict(_changes_type= '_uncommitted_changes')),
50
dict(_changes_type= '_pending_merges')),
52
dict(_changes_type= '_out_of_sync_trees')),
54
tests.multiply_tests(changes_tests, changes_scenarios, result)
55
# No parametrization for the remaining tests
56
result.addTests(remaining_tests)
61
class TestDpush(blackbox.ExternalBase):
23
from bzrlib.branch import (
27
from bzrlib.bzrdir import (
30
from bzrlib.foreign import (
34
from bzrlib.repository import (
37
from bzrlib.tests.blackbox import (
40
from bzrlib.tests.test_foreign import (
41
DummyForeignVcsDirFormat,
42
InterToDummyVcsBranch,
46
class TestDpush(ExternalBase):
49
BzrDirFormat.register_control_format(DummyForeignVcsDirFormat)
50
InterBranch.register_optimiser(InterToDummyVcsBranch)
51
self.addCleanup(self.unregister_format)
64
52
super(TestDpush, self).setUp()
65
test_foreign.register_dummy_foreign_for_test(self)
54
def unregister_format(self):
56
BzrDirFormat.unregister_control_format(DummyForeignVcsDirFormat)
59
InterBranch.unregister_optimiser(InterToDummyVcsBranch)
67
61
def make_dummy_builder(self, relpath):
68
builder = self.make_branch_builder(
69
relpath, format=test_foreign.DummyForeignVcsDirFormat())
70
builder.build_snapshot('revid', None,
62
builder = self.make_branch_builder(relpath,
63
format=DummyForeignVcsDirFormat())
64
builder.build_snapshot('revid', None,
71
65
[('add', ('', 'TREE_ROOT', 'directory', None)),
72
66
('add', ('foo', 'fooid', 'file', 'bar'))])
91
85
self.check_output("", "status dc")
93
87
def test_dpush_new(self):
94
b = self.make_dummy_builder('d').get_branch()
88
branch = self.make_dummy_builder('d').get_branch()
96
dc = b.bzrdir.sprout('dc', force_new_repo=True)
90
dc = branch.bzrdir.sprout('dc', force_new_repo=True)
97
91
self.build_tree_contents([("dc/foofile", "blaaaa")])
98
92
dc_tree = dc.open_workingtree()
99
93
dc_tree.add("foofile")
104
98
self.check_output("", "status dc")
106
100
def test_dpush_wt_diff(self):
107
b = self.make_dummy_builder('d').get_branch()
101
branch = self.make_dummy_builder('d').get_branch()
109
dc = b.bzrdir.sprout('dc', force_new_repo=True)
103
dc = branch.bzrdir.sprout('dc', force_new_repo=True)
110
104
self.build_tree_contents([("dc/foofile", "blaaaa")])
111
105
dc_tree = dc.open_workingtree()
112
106
dc_tree.add("foofile")
113
107
newrevid = dc_tree.commit('msg')
115
109
self.build_tree_contents([("dc/foofile", "blaaaal")])
116
self.check_output("", "dpush -d dc d --no-strict")
110
self.check_output("", "dpush -d dc d")
117
111
self.assertFileEqual("blaaaal", "dc/foofile")
118
# if the dummy vcs wasn't that dummy we could uncomment the line below
119
# self.assertFileEqual("blaaaa", "d/foofile")
120
112
self.check_output('modified:\n foofile\n', "status dc")
122
114
def test_diverged(self):
123
115
builder = self.make_dummy_builder('d')
125
b = builder.get_branch()
117
branch = builder.get_branch()
127
dc = b.bzrdir.sprout('dc', force_new_repo=True)
119
dc = branch.bzrdir.sprout('dc', force_new_repo=True)
128
120
dc_tree = dc.open_workingtree()
130
122
self.build_tree_contents([("dc/foo", "bar")])
136
128
output, error = self.run_bzr("dpush -d dc d", retcode=3)
137
129
self.assertEquals(output, "")
138
130
self.assertContainsRe(error, "have diverged")
141
class TestDpushStrictMixin(object):
144
test_foreign.register_dummy_foreign_for_test(self)
145
# Create an empty branch where we will be able to push
146
self.foreign = self.make_branch(
147
'to', format=test_foreign.DummyForeignVcsDirFormat())
149
def set_config_push_strict(self, value):
150
# set config var (any of bazaar.conf, locations.conf, branch.conf
152
conf = self.tree.branch.get_config()
153
conf.set_user_option('dpush_strict', value)
155
_default_command = ['dpush', '../to']
156
_default_pushed_revid = False # Doesn't aplly for dpush
158
def assertPushSucceeds(self, args, pushed_revid=None):
159
self.run_bzr(self._default_command + args,
160
working_dir=self._default_wd)
161
if pushed_revid is None:
162
# dpush change the revids, so we need to get back to it
163
branch_from = branch.Branch.open(self._default_wd)
164
pushed_revid = branch_from.last_revision()
165
branch_to = branch.Branch.open('to')
166
repo_to = branch_to.repository
167
self.assertTrue(repo_to.has_revision(pushed_revid))
168
self.assertEqual(branch_to.last_revision(), pushed_revid)
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')