27
27
from bzrlib.branch import Branch
28
28
from bzrlib.bzrdir import BzrDir
29
from bzrlib.conflicts import resolve
29
30
from bzrlib.errors import BzrCommandError
30
31
from bzrlib.tests.blackbox import ExternalBase
31
32
from bzrlib.workingtree import WorkingTree
36
37
def test_05_empty_commit(self):
37
38
"""Commit of tree with no versioned files should fail"""
38
39
# If forced, it should succeed, but this is not tested here.
40
self.make_branch_and_tree('.')
40
41
self.build_tree(['hello.txt'])
41
42
out,err = self.run_bzr('commit -m empty', retcode=3)
42
43
self.assertEqual('', out)
46
47
def test_commit_success(self):
47
48
"""Successful commit should not leave behind a bzr-commit-* file"""
49
self.make_branch_and_tree('.')
49
50
self.run_bzr('commit --unchanged -m message')
50
51
self.assertEqual('', self.run_bzr('unknowns')[0])
56
57
def test_commit_with_path(self):
57
58
"""Commit tree with path of root specified"""
58
self.run_bzr('init a')
59
a_tree = self.make_branch_and_tree('a')
59
60
self.build_tree(['a/a_file'])
60
self.run_bzr('add a/a_file')
61
62
self.run_bzr(['commit', '-m', 'first commit', 'a'])
63
self.run_bzr('branch a b')
64
b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
64
65
self.build_tree_contents([('b/a_file', 'changes in b')])
65
66
self.run_bzr(['commit', '-m', 'first commit in b', 'b'])
67
68
self.build_tree_contents([('a/a_file', 'new contents')])
68
69
self.run_bzr(['commit', '-m', 'change in a', 'a'])
71
self.run_bzr('merge ../a', retcode=1) # will conflict
71
b_tree.merge_from_branch(a_tree.branch)
73
72
self.run_bzr('resolved b/a_file')
74
73
self.run_bzr(['commit', '-m', 'merge into b', 'b'])
77
76
def test_10_verbose_commit(self):
78
77
"""Add one file and examine verbose commit output"""
78
tree = self.make_branch_and_tree('.')
80
79
self.build_tree(['hello.txt'])
81
self.run_bzr("add hello.txt")
82
81
out,err = self.run_bzr('commit -m added')
83
82
self.assertEqual('', out)
84
83
self.assertEqual('added hello.txt\n'
142
141
def test_verbose_commit_with_unchanged(self):
143
142
"""Unchanged files should not be listed by default in verbose output"""
143
tree = self.make_branch_and_tree('.')
145
144
self.build_tree(['hello.txt', 'unchanged.txt'])
146
self.run_bzr('add unchanged.txt')
145
tree.add('unchanged.txt')
147
146
self.run_bzr('commit -m unchanged unchanged.txt')
148
self.run_bzr("add hello.txt")
147
tree.add("hello.txt")
149
148
out,err = self.run_bzr('commit -m added')
150
149
self.assertEqual('', out)
151
150
self.assertEqual('added hello.txt\n'
221
220
def test_empty_commit_message(self):
223
file('foo.c', 'wt').write('int main() {}')
224
self.run_bzr('add foo.c')
221
tree = self.make_branch_and_tree('.')
222
self.build_tree_contents([('foo.c', 'int main() {}')])
225
224
self.run_bzr('commit -m ""', retcode=3)
227
226
def test_other_branch_commit(self):
228
227
# this branch is to ensure consistent behaviour, whether we're run
229
228
# inside a branch, or not.
230
os.mkdir('empty_branch')
231
os.chdir('empty_branch')
236
file('foo.c', 'wt').write('int main() {}')
237
file('bar.c', 'wt').write('int main() {}')
239
self.run_bzr('add branch/foo.c')
240
self.run_bzr('add branch')
229
outer_tree = self.make_branch_and_tree('.')
230
inner_tree = self.make_branch_and_tree('branch')
231
self.build_tree_contents([
232
('branch/foo.c', 'int main() {}'),
233
('branch/bar.c', 'int main() {}')])
234
inner_tree.add('foo.c')
235
inner_tree.add('bar.c')
241
236
# can't commit files in different trees; sane error
242
237
self.run_bzr('commit -m newstuff branch/foo.c .', retcode=3)
243
238
self.run_bzr('commit -m newstuff branch/foo.c')
247
242
def test_out_of_date_tree_commit(self):
248
243
# check we get an error code and a clear message committing with an out
249
244
# of date checkout
250
self.make_branch_and_tree('branch')
245
tree = self.make_branch_and_tree('branch')
251
246
# make a checkout
252
self.run_bzr('checkout --lightweight branch checkout')
247
checkout = tree.branch.create_checkout('checkout', lightweight=True)
253
248
# commit to the original branch to make the checkout out of date
254
self.run_bzr('commit --unchanged -m message branch')
249
tree.commit('message branch', allow_pointless=True)
255
250
# now commit to the checkout should emit
256
251
# ERROR: Out of date with the branch, 'bzr update' is suggested
257
252
output = self.run_bzr('commit --unchanged -m checkout_message '
275
270
# past. This is a user story reported to fail in bug #43959 where
276
271
# a merge done in a checkout (using the update command) failed to
277
272
# commit correctly.
278
self.run_bzr('init trunk')
273
trunk = self.make_branch_and_tree('trunk')
280
self.run_bzr('checkout trunk u1')
275
u1 = trunk.branch.create_checkout('u1')
281
276
self.build_tree_contents([('u1/hosts', 'initial contents')])
282
self.run_bzr('add u1/hosts')
283
278
self.run_bzr('commit -m add-hosts u1')
285
self.run_bzr('checkout trunk u2')
280
u2 = trunk.branch.create_checkout('u2')
286
281
self.build_tree_contents([('u2/hosts', 'altered in u2')])
287
282
self.run_bzr('commit -m checkin-from-u2 u2')