92
96
eq(rev.message, 'add hello')
94
98
tree1 = b.repository.revision_tree(rh[0])
95
100
text = tree1.get_file_text(file_id)
96
eq(text, 'hello world')
102
self.assertEqual('hello world', text)
98
104
tree2 = b.repository.revision_tree(rh[1])
99
eq(tree2.get_file_text(file_id), 'version 2')
106
text = tree2.get_file_text(file_id)
108
self.assertEqual('version 2', text)
101
110
def test_delete_commit(self):
102
111
"""Test a commit with a deleted file"""
112
121
tree = b.repository.revision_tree('rev2')
113
122
self.assertFalse(tree.has_id('hello-id'))
124
def test_partial_commit_move(self):
125
"""Test a partial commit where a file was renamed but not committed.
127
https://bugs.launchpad.net/bzr/+bug/83039
129
If not handled properly, commit will try to snapshot
130
dialog.py with olive/ as a parent, while
131
olive/ has not been snapshotted yet.
133
wt = self.make_branch_and_tree('.')
135
self.build_tree(['annotate/', 'annotate/foo.py',
136
'olive/', 'olive/dialog.py'
138
wt.add(['annotate', 'olive', 'annotate/foo.py', 'olive/dialog.py'])
139
wt.commit(message='add files')
140
wt.rename_one("olive/dialog.py", "aaa")
141
self.build_tree_contents([('annotate/foo.py', 'modified\n')])
142
wt.commit('renamed hello', specific_files=["annotate"])
115
144
def test_pointless_commit(self):
116
145
"""Commit refuses unless there are changes or it's forced."""
117
146
wt = self.make_branch_and_tree('.')
167
196
tree2 = b.repository.revision_tree('test@rev-2')
198
self.addCleanup(tree2.unlock)
168
199
self.assertTrue(tree2.has_filename('hello'))
169
200
self.assertEquals(tree2.get_file_text('hello-id'), 'hello')
170
201
self.assertEquals(tree2.get_file_text('buongia-id'), 'new text')
172
203
tree3 = b.repository.revision_tree('test@rev-3')
205
self.addCleanup(tree3.unlock)
173
206
self.assertFalse(tree3.has_filename('hello'))
174
207
self.assertEquals(tree3.get_file_text('buongia-id'), 'new text')
194
229
eq(ie.revision, 'test@rev-1')
196
231
tree2 = b.repository.revision_tree('test@rev-2')
233
self.addCleanup(tree2.unlock)
197
234
eq(tree2.id2path('hello-id'), 'fruity')
198
235
eq(tree2.get_file_text('hello-id'), 'contents of hello\n')
199
236
self.check_inventory_shape(tree2.inventory, ['fruity'])
425
464
bound = master.sprout('bound')
426
465
wt = bound.open_workingtree()
427
466
wt.branch.set_bound_location(os.path.realpath('master'))
429
orig_default = lockdir._DEFAULT_TIMEOUT_SECONDS
430
467
master_branch.lock_write()
432
lockdir._DEFAULT_TIMEOUT_SECONDS = 1
433
469
self.assertRaises(LockContention, wt.commit, 'silly')
435
lockdir._DEFAULT_TIMEOUT_SECONDS = orig_default
436
471
master_branch.unlock()
438
473
def test_commit_bound_merge(self):
523
558
('change', 'added', 'newdir'),
524
559
('change', 'added', 'newfile'),
525
560
('renamed', 'renamed', 'dirtorename', 'renameddir'),
561
('renamed', 'renamed', 'filetorename', 'renamedfile'),
526
562
('renamed', 'renamed', 'dirtoreparent', 'renameddir/reparenteddir'),
527
563
('renamed', 'renamed', 'filetoreparent', 'renameddir/reparentedfile'),
528
('renamed', 'renamed', 'filetorename', 'renamedfile'),
529
564
('deleted', 'dirtoremove'),
530
565
('deleted', 'filetoremove'),
679
713
repository.add_inventory = raise_
680
714
self.assertRaises(errors.NoSuchFile, tree.commit, message_callback=cb)
681
715
self.assertFalse(cb.called)
717
def test_selected_file_merge_commit(self):
718
"""Ensure the correct error is raised"""
719
tree = self.make_branch_and_tree('foo')
720
# pending merge would turn into a left parent
721
tree.commit('commit 1')
722
tree.add_parent_tree_id('example')
723
self.build_tree(['foo/bar', 'foo/baz'])
724
tree.add(['bar', 'baz'])
725
err = self.assertRaises(errors.CannotCommitSelectedFileMerge,
726
tree.commit, 'commit 2', specific_files=['bar', 'baz'])
727
self.assertEqual(['bar', 'baz'], err.files)
728
self.assertEqual('Selected-file commit of merges is not supported'
729
' yet: files bar, baz', str(err))
731
def test_commit_ordering(self):
732
"""Test of corner-case commit ordering error"""
733
tree = self.make_branch_and_tree('.')
734
self.build_tree(['a/', 'a/z/', 'a/c/', 'a/z/x', 'a/z/y'])
735
tree.add(['a/', 'a/z/', 'a/c/', 'a/z/x', 'a/z/y'])
737
self.build_tree(['a/c/d/'])
739
tree.rename_one('a/z/x', 'a/c/d/x')
740
tree.commit('test', specific_files=['a/z/y'])
742
def test_commit_no_author(self):
743
"""The default kwarg author in MutableTree.commit should not add
744
the 'author' revision property.
746
tree = self.make_branch_and_tree('foo')
747
rev_id = tree.commit('commit 1')
748
rev = tree.branch.repository.get_revision(rev_id)
749
self.assertFalse('author' in rev.properties)
751
def test_commit_author(self):
752
"""Passing a non-empty author kwarg to MutableTree.commit should add
753
the 'author' revision property.
755
tree = self.make_branch_and_tree('foo')
756
rev_id = tree.commit('commit 1', author='John Doe <jdoe@example.com>')
757
rev = tree.branch.repository.get_revision(rev_id)
758
self.assertEqual('John Doe <jdoe@example.com>',
759
rev.properties['author'])
761
def test_commit_with_checkout_and_branch_sharing_repo(self):
762
repo = self.make_repository('repo', shared=True)
763
# make_branch_and_tree ignores shared repos
764
branch = bzrdir.BzrDir.create_branch_convenience('repo/branch')
765
tree2 = branch.create_checkout('repo/tree2')
766
tree2.commit('message', rev_id='rev1')
767
self.assertTrue(tree2.branch.repository.has_revision('rev1'))