81
81
rev_id1 = tree.commit('one')
82
82
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
83
83
rev_id2 = tree2.commit('two')
84
rev_id3 = tree2.commit('three')
84
85
tree3 = tree2.bzrdir.sprout('tree3').open_workingtree()
85
rev_id3 = tree2.commit('three')
86
86
rev_id4 = tree3.commit('four')
87
87
rev_id5 = tree3.commit('five')
88
88
tree.merge_from_branch(tree2.branch)
411
411
text = diff_buffer.get_text(diff_buffer.get_start_iter(),
412
412
diff_buffer.get_end_iter()).splitlines(True)
414
self.assertEqual("=== modified file 'a'\n", text[0])
414
self.assertEqual("=== removed file 'b'\n", text[0])
415
415
self.assertContainsRe(text[1],
416
r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
417
self.assertEqual('+++ b\t1970-01-01 00:00:00 +0000\n', text[2])
418
self.assertEqual('@@ -1,1 +0,0 @@\n', text[3])
419
self.assertEqual('-contents of tree/b\n', text[4])
420
self.assertEqual('\n', text[5])
422
self.assertEqual("=== modified file 'a'\n", text[6])
423
self.assertContainsRe(text[7],
416
424
r"--- a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
417
self.assertContainsRe(text[2],
418
r"\+\+\+ a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
419
self.assertEqual('@@ -1,1 +1,1 @@\n', text[3])
420
self.assertEqual('-contents of tree/a\n', text[4])
421
self.assertEqual('+new contents for a\n', text[5])
422
self.assertEqual('\n', text[6])
424
self.assertEqual("=== removed file 'b'\n", text[7])
425
425
self.assertContainsRe(text[8],
426
r"--- b\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
427
self.assertEqual('+++ b\t1970-01-01 00:00:00 +0000\n', text[9])
428
self.assertEqual('@@ -1,1 +0,0 @@\n', text[10])
429
self.assertEqual('-contents of tree/b\n', text[11])
426
r"\+\+\+ a\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d")
427
self.assertEqual('@@ -1,1 +1,1 @@\n', text[9])
428
self.assertEqual('-contents of tree/a\n', text[10])
429
self.assertEqual('+new contents for a\n', text[11])
430
430
self.assertEqual('\n', text[12])
432
432
self.assertEqual('Diff for All Files', dlg._diff_label.get_text())
644
644
'message':'message\nfor b_dir\n'},
645
645
]), dlg._get_specific_files())
647
def test_specific_files_sanitizes_messages(self):
648
tree = self.make_branch_and_tree('tree')
649
tree.branch.get_config().set_user_option('per_file_commits', 'true')
650
self.build_tree(['tree/a_file', 'tree/b_dir/'])
651
tree.add(['a_file', 'b_dir'], ['1a-id', '0b-id'])
653
dlg = commit.CommitDialog(tree)
654
dlg._commit_selected_radio.set_active(True)
655
self.assertEqual((['a_file', 'b_dir'], []), dlg._get_specific_files())
657
dlg._treeview_files.set_cursor((1,))
658
dlg._set_file_commit_message('Test\r\nmessage\rfor a_file\n')
659
dlg._treeview_files.set_cursor((2,))
660
dlg._set_file_commit_message('message\r\nfor\nb_dir\r')
662
self.assertEqual((['a_file', 'b_dir'],
663
[{'path':'a_file', 'file_id':'1a-id',
664
'message':'Test\nmessage\nfor a_file\n'},
665
{'path':'b_dir', 'file_id':'0b-id',
666
'message':'message\nfor\nb_dir\n'},
667
]), dlg._get_specific_files())
670
648
class TestCommitDialog_Commit(tests.TestCaseWithTransport):
671
649
"""Tests on the actual 'commit' button being pushed."""
673
651
def _set_question_yes(self, dlg):
674
652
"""Set the dialog to answer YES to any questions."""
675
653
self.questions = []
676
def _question_yes(*args, **kwargs):
654
def _question_yes(*args):
677
655
self.questions.append(args)
678
656
self.questions.append('YES')
679
657
return gtk.RESPONSE_YES
709
687
self.assertEqual(last_rev, dlg.committed_revision_id)
710
688
self.assertEqual(rev_id1, tree.branch.last_revision())
712
def test_commit_global_sanitizes_message(self):
713
tree = self.make_branch_and_tree('tree')
714
self.build_tree(['tree/a'])
715
tree.add(['a'], ['a-id'])
716
rev_id1 = tree.commit('one')
718
self.build_tree(['tree/b'])
719
tree.add(['b'], ['b-id'])
720
dlg = commit.CommitDialog(tree)
721
# With the check box set, it should only effect the local branch
722
dlg._set_global_commit_message('Commit\r\nmessage\rfoo\n')
724
rev = tree.branch.repository.get_revision(tree.last_revision())
725
self.assertEqual('Commit\nmessage\nfoo\n', rev.message)
727
690
def test_bound_commit_both(self):
728
691
tree = self.make_branch_and_tree('tree')
729
692
self.build_tree(['tree/a'])
745
708
self.assertEqual(last_rev, dlg.committed_revision_id)
746
709
self.assertEqual(last_rev, tree.branch.last_revision())
748
def test_commit_empty_message(self):
711
def test_commit_no_message(self):
749
712
tree = self.make_branch_and_tree('tree')
750
713
self.build_tree(['tree/a', 'tree/b'])
751
714
tree.add(['a'], ['a-id'])
1022
985
], bencode.bdecode(file_info))
1024
987
def test_commit_unicode_messages(self):
1025
self.requireFeature(tests.UnicodeFilenameFeature)
988
from bzrlib.tests.test_diff import UnicodeFilename
989
self.requireFeature(UnicodeFilename)
1027
991
tree = self.make_branch_and_tree('tree')
1028
992
tree.branch.get_config().set_user_option('per_file_commits', 'true')
1067
1031
{'path':u'\u03a9', 'file_id':'omega-id',
1068
1032
'message':u'\u03a9 is the end of all things.\n'},
1069
1033
], file_info_decoded)
1072
class TestSanitizeMessage(tests.TestCase):
1074
def assertSanitize(self, expected, original):
1075
self.assertEqual(expected,
1076
commit._sanitize_and_decode_message(original))
1078
def test_untouched(self):
1079
self.assertSanitize('foo\nbar\nbaz\n', 'foo\nbar\nbaz\n')
1081
def test_converts_cr_to_lf(self):
1082
self.assertSanitize('foo\nbar\nbaz\n', 'foo\rbar\rbaz\r')
1084
def test_converts_crlf_to_lf(self):
1085
self.assertSanitize('foo\nbar\nbaz\n', 'foo\r\nbar\r\nbaz\r\n')
1087
def test_converts_mixed_to_lf(self):
1088
self.assertSanitize('foo\nbar\nbaz\n', 'foo\r\nbar\rbaz\n')