29
28
from bzrlib.bzrdir import BzrDir, BzrDirMetaFormat1
30
29
from bzrlib.commit import Commit, NullCommitReporter
31
30
from bzrlib.config import BranchConfig
32
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
31
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
34
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
33
from bzrlib.tests import TestCaseWithTransport
35
34
from bzrlib.workingtree import WorkingTree
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
def test_missing_commit(self):
111
"""Test a commit with a missing file"""
101
def test_delete_commit(self):
102
"""Test a commit with a deleted file"""
112
103
wt = self.make_branch_and_tree('.')
114
105
file('hello', 'w').write('hello world')
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('.')
550
517
this_tree.merge_from_branch(other_tree.branch)
551
518
reporter = CapturingReporter()
552
519
this_tree.commit('do the commit', reporter=reporter)
521
('change', 'unchanged', ''),
522
('change', 'unchanged', 'dirtoleave'),
523
('change', 'unchanged', 'filetoleave'),
554
524
('change', 'modified', 'filetomodify'),
555
525
('change', 'added', 'newdir'),
556
526
('change', 'added', 'newfile'),
557
527
('renamed', 'renamed', 'dirtorename', 'renameddir'),
558
('renamed', 'renamed', 'filetorename', 'renamedfile'),
559
528
('renamed', 'renamed', 'dirtoreparent', 'renameddir/reparenteddir'),
560
529
('renamed', 'renamed', 'filetoreparent', 'renameddir/reparentedfile'),
530
('renamed', 'renamed', 'filetorename', 'renamedfile'),
561
531
('deleted', 'dirtoremove'),
562
532
('deleted', 'filetoremove'),
564
result = set(reporter.calls)
565
missing = expected - result
566
new = result - expected
567
self.assertEqual((set(), set()), (missing, new))
569
536
def test_commit_removals_respects_filespec(self):
570
537
"""Commit respects the specified_files for removals."""
727
695
self.assertEqual(['bar', 'baz'], err.files)
728
696
self.assertEqual('Selected-file commit of merges is not supported'
729
697
' 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)
750
self.assertFalse('authors' in rev.properties)
752
def test_commit_author(self):
753
"""Passing a non-empty author kwarg to MutableTree.commit should add
754
the 'author' revision property.
756
tree = self.make_branch_and_tree('foo')
757
rev_id = self.callDeprecated(['The parameter author was '
758
'deprecated in version 1.13. Use authors instead'],
759
tree.commit, 'commit 1', author='John Doe <jdoe@example.com>')
760
rev = tree.branch.repository.get_revision(rev_id)
761
self.assertEqual('John Doe <jdoe@example.com>',
762
rev.properties['authors'])
763
self.assertFalse('author' in rev.properties)
765
def test_commit_empty_authors_list(self):
766
"""Passing an empty list to authors shouldn't add the property."""
767
tree = self.make_branch_and_tree('foo')
768
rev_id = tree.commit('commit 1', authors=[])
769
rev = tree.branch.repository.get_revision(rev_id)
770
self.assertFalse('author' in rev.properties)
771
self.assertFalse('authors' in rev.properties)
773
def test_multiple_authors(self):
774
tree = self.make_branch_and_tree('foo')
775
rev_id = tree.commit('commit 1',
776
authors=['John Doe <jdoe@example.com>',
777
'Jane Rey <jrey@example.com>'])
778
rev = tree.branch.repository.get_revision(rev_id)
779
self.assertEqual('John Doe <jdoe@example.com>\n'
780
'Jane Rey <jrey@example.com>', rev.properties['authors'])
781
self.assertFalse('author' in rev.properties)
783
def test_author_and_authors_incompatible(self):
784
tree = self.make_branch_and_tree('foo')
785
self.assertRaises(AssertionError, tree.commit, 'commit 1',
786
authors=['John Doe <jdoe@example.com>',
787
'Jane Rey <jrey@example.com>'],
788
author="Jack Me <jme@example.com>")
790
def test_author_with_newline_rejected(self):
791
tree = self.make_branch_and_tree('foo')
792
self.assertRaises(AssertionError, tree.commit, 'commit 1',
793
authors=['John\nDoe <jdoe@example.com>'])
795
def test_commit_with_checkout_and_branch_sharing_repo(self):
796
repo = self.make_repository('repo', shared=True)
797
# make_branch_and_tree ignores shared repos
798
branch = bzrdir.BzrDir.create_branch_convenience('repo/branch')
799
tree2 = branch.create_checkout('repo/tree2')
800
tree2.commit('message', rev_id='rev1')
801
self.assertTrue(tree2.branch.repository.has_revision('rev1'))