13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29
29
from bzrlib.bzrdir import BzrDir, BzrDirMetaFormat1
30
30
from bzrlib.commit import Commit, NullCommitReporter
31
31
from bzrlib.config import BranchConfig
32
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
32
from bzrlib.errors import (PointlessCommit, BzrError, SigningFailed,
34
34
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
35
35
from bzrlib.workingtree import WorkingTree
108
108
self.assertEqual('version 2', text)
110
def test_delete_commit(self):
111
"""Test a commit with a deleted file"""
110
def test_missing_commit(self):
111
"""Test a commit with a missing file"""
112
112
wt = self.make_branch_and_tree('.')
114
114
file('hello', 'w').write('hello world')
125
125
"""Test a partial commit where a file was renamed but not committed.
127
127
https://bugs.launchpad.net/bzr/+bug/83039
129
129
If not handled properly, commit will try to snapshot
130
dialog.py with olive/ as a parent, while
130
dialog.py with olive/ as a parent, while
131
131
olive/ has not been snapshotted yet.
133
133
wt = self.make_branch_and_tree('.')
501
501
bound_tree.commit(message='commit of merge in bound tree')
503
503
def test_commit_reporting_after_merge(self):
504
# when doing a commit of a merge, the reporter needs to still
504
# when doing a commit of a merge, the reporter needs to still
505
505
# be called for each item that is added/removed/deleted.
506
506
this_tree = self.make_branch_and_tree('this')
507
507
# we need a bunch of files and dirs, to perform one action on each.
550
550
this_tree.merge_from_branch(other_tree.branch)
551
551
reporter = CapturingReporter()
552
552
this_tree.commit('do the commit', reporter=reporter)
554
('change', 'unchanged', ''),
555
('change', 'unchanged', 'dirtoleave'),
556
('change', 'unchanged', 'filetoleave'),
557
554
('change', 'modified', 'filetomodify'),
558
555
('change', 'added', 'newdir'),
559
556
('change', 'added', 'newfile'),
563
560
('renamed', 'renamed', 'filetoreparent', 'renameddir/reparentedfile'),
564
561
('deleted', 'dirtoremove'),
565
562
('deleted', 'filetoremove'),
564
result = set(reporter.calls)
565
missing = expected - result
566
new = result - expected
567
self.assertEqual((set(), set()), (missing, new))
569
569
def test_commit_removals_respects_filespec(self):
570
570
"""Commit respects the specified_files for removals."""
660
660
def test_commit_unversioned_specified(self):
661
661
"""Commit should raise if specified files isn't in basis or worktree"""
662
662
tree = self.make_branch_and_tree('.')
663
self.assertRaises(errors.PathsNotVersionedError, tree.commit,
663
self.assertRaises(errors.PathsNotVersionedError, tree.commit,
664
664
'message', specific_files=['bogus'])
666
666
class Callback(object):
668
668
def __init__(self, message, testcase):
669
669
self.called = False
670
670
self.message = message
698
698
"""Callback should not be invoked for pointless commit"""
699
699
tree = self.make_branch_and_tree('.')
700
700
cb = self.Callback(u'commit 2', self)
701
self.assertRaises(PointlessCommit, tree.commit, message_callback=cb,
701
self.assertRaises(PointlessCommit, tree.commit, message_callback=cb,
702
702
allow_pointless=False)
703
703
self.assertFalse(cb.called)
747
747
rev_id = tree.commit('commit 1')
748
748
rev = tree.branch.repository.get_revision(rev_id)
749
749
self.assertFalse('author' in rev.properties)
750
self.assertFalse('authors' in rev.properties)
751
752
def test_commit_author(self):
752
753
"""Passing a non-empty author kwarg to MutableTree.commit should add
753
754
the 'author' revision property.
755
756
tree = self.make_branch_and_tree('foo')
756
rev_id = tree.commit('commit 1', author='John Doe <jdoe@example.com>')
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>')
757
760
rev = tree.branch.repository.get_revision(rev_id)
758
761
self.assertEqual('John Doe <jdoe@example.com>',
759
rev.properties['author'])
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>'])
761
795
def test_commit_with_checkout_and_branch_sharing_repo(self):
762
796
repo = self.make_repository('repo', shared=True)