96
92
eq(rev.message, 'add hello')
98
94
tree1 = b.repository.revision_tree(rh[0])
100
95
text = tree1.get_file_text(file_id)
102
self.assertEqual('hello world', text)
96
eq(text, 'hello world')
104
98
tree2 = b.repository.revision_tree(rh[1])
106
text = tree2.get_file_text(file_id)
108
self.assertEqual('version 2', text)
99
eq(tree2.get_file_text(file_id), 'version 2')
110
101
def test_delete_commit(self):
111
102
"""Test a commit with a deleted file"""
121
112
tree = b.repository.revision_tree('rev2')
122
113
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"])
144
115
def test_pointless_commit(self):
145
116
"""Commit refuses unless there are changes or it's forced."""
146
117
wt = self.make_branch_and_tree('.')
196
167
tree2 = b.repository.revision_tree('test@rev-2')
198
self.addCleanup(tree2.unlock)
199
168
self.assertTrue(tree2.has_filename('hello'))
200
169
self.assertEquals(tree2.get_file_text('hello-id'), 'hello')
201
170
self.assertEquals(tree2.get_file_text('buongia-id'), 'new text')
203
172
tree3 = b.repository.revision_tree('test@rev-3')
205
self.addCleanup(tree3.unlock)
206
173
self.assertFalse(tree3.has_filename('hello'))
207
174
self.assertEquals(tree3.get_file_text('buongia-id'), 'new text')
229
194
eq(ie.revision, 'test@rev-1')
231
196
tree2 = b.repository.revision_tree('test@rev-2')
233
self.addCleanup(tree2.unlock)
234
197
eq(tree2.id2path('hello-id'), 'fruity')
235
198
eq(tree2.get_file_text('hello-id'), 'contents of hello\n')
236
199
self.check_inventory_shape(tree2.inventory, ['fruity'])
464
427
bound = master.sprout('bound')
465
428
wt = bound.open_workingtree()
466
429
wt.branch.set_bound_location(os.path.realpath('master'))
431
orig_default = lockdir._DEFAULT_TIMEOUT_SECONDS
467
432
master_branch.lock_write()
434
lockdir._DEFAULT_TIMEOUT_SECONDS = 1
469
435
self.assertRaises(LockContention, wt.commit, 'silly')
437
lockdir._DEFAULT_TIMEOUT_SECONDS = orig_default
471
438
master_branch.unlock()
473
440
def test_commit_bound_merge(self):
558
525
('change', 'added', 'newdir'),
559
526
('change', 'added', 'newfile'),
560
527
('renamed', 'renamed', 'dirtorename', 'renameddir'),
561
('renamed', 'renamed', 'filetorename', 'renamedfile'),
562
528
('renamed', 'renamed', 'dirtoreparent', 'renameddir/reparenteddir'),
563
529
('renamed', 'renamed', 'filetoreparent', 'renameddir/reparentedfile'),
530
('renamed', 'renamed', 'filetorename', 'renamedfile'),
564
531
('deleted', 'dirtoremove'),
565
532
('deleted', 'filetoremove'),
713
681
repository.add_inventory = raise_
714
682
self.assertRaises(errors.NoSuchFile, tree.commit, message_callback=cb)
715
683
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'))