~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_commit.py

  • Committer: Alexander Belchenko
  • Date: 2010-06-17 08:53:15 UTC
  • mfrom: (5300 +trunk)
  • mto: (5303.2.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5305.
  • Revision ID: bialix@ukr.net-20100617085315-hr8186zck57zn35s
merge bzr.dev; fix NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""Tests for the commit CLI of bzr."""
19
19
 
20
20
import os
 
21
import re
21
22
import sys
22
23
 
23
24
from bzrlib import (
107
108
                              'modified hello\.txt\n'
108
109
                              'Committed revision 2\.\n$')
109
110
 
 
111
    def test_unicode_commit_message_is_filename(self):
 
112
        """Unicode commit message same as a filename (Bug #563646).
 
113
        """
 
114
        file_name = u'\N{euro sign}'
 
115
        self.run_bzr(['init'])
 
116
        open(file_name, 'w').write('hello world')
 
117
        self.run_bzr(['add'])
 
118
        out, err = self.run_bzr(['commit', '-m', file_name])
 
119
        reflags = re.MULTILINE|re.DOTALL|re.UNICODE
 
120
        te = osutils.get_terminal_encoding()
 
121
        self.assertContainsRe(err.decode(te),
 
122
            u'The commit message is a file name:',
 
123
            flags=reflags)
 
124
 
 
125
        # Run same test with a filename that causes encode
 
126
        # error for the terminal encoding. We do this
 
127
        # by forcing terminal encoding of ascii for
 
128
        # osutils.get_terminal_encoding which is used
 
129
        # by ui.text.show_warning
 
130
        default_get_terminal_enc = osutils.get_terminal_encoding
 
131
        try:
 
132
            osutils.get_terminal_encoding = lambda: 'ascii'
 
133
            file_name = u'foo\u1234'
 
134
            open(file_name, 'w').write('hello world')
 
135
            self.run_bzr(['add'])
 
136
            out, err = self.run_bzr(['commit', '-m', file_name])
 
137
            reflags = re.MULTILINE|re.DOTALL|re.UNICODE
 
138
            te = osutils.get_terminal_encoding()
 
139
            self.assertContainsRe(err.decode(te, 'replace'),
 
140
                u'The commit message is a file name:',
 
141
                flags=reflags)
 
142
        finally:
 
143
            osutils.get_terminal_encoding = default_get_terminal_enc
 
144
 
110
145
    def test_warn_about_forgotten_commit_message(self):
111
146
        """Test that the lack of -m parameter is caught"""
112
147
        wt = self.make_branch_and_tree('.')
663
698
        self.assertContainsRe(err, r'modified test\nCommitted revision 2.')
664
699
 
665
700
    def test_commit_readonly_checkout(self):
666
 
        # https://bugs.edge.launchpad.net/bzr/+bug/129701
 
701
        # https://bugs.launchpad.net/bzr/+bug/129701
667
702
        # "UnlockableTransport error trying to commit in checkout of readonly
668
703
        # branch"
669
704
        self.make_branch('master')
675
710
        self.assertContainsRe(err,
676
711
            r'^bzr: ERROR: Cannot lock.*readonly transport')
677
712
 
678
 
    def test_commit_hook_template(self):
 
713
    def setup_editor(self):
679
714
        # Test that commit template hooks work
680
715
        if sys.platform == "win32":
681
716
            f = file('fed.bat', 'w')
688
723
            f.close()
689
724
            os.chmod('fed.sh', 0755)
690
725
            osutils.set_or_unset_env('BZR_EDITOR', "./fed.sh")
 
726
 
 
727
    def setup_commit_with_template(self):
 
728
        self.setup_editor()
691
729
        msgeditor.hooks.install_named_hook("commit_message_template",
692
730
                lambda commit_obj, msg: "save me some typing\n", None)
693
731
        tree = self.make_branch_and_tree('tree')
694
732
        self.build_tree(['tree/hello.txt'])
695
733
        tree.add('hello.txt')
696
 
        out, err = self.run_bzr("commit tree/hello.txt")
 
734
        return tree
 
735
 
 
736
    def test_commit_hook_template_accepted(self):
 
737
        tree = self.setup_commit_with_template()
 
738
        out, err = self.run_bzr("commit tree/hello.txt", stdin="y\n")
697
739
        last_rev = tree.branch.repository.get_revision(tree.last_revision())
698
740
        self.assertEqual('save me some typing\n', last_rev.message)
 
741
 
 
742
    def test_commit_hook_template_rejected(self):
 
743
        tree = self.setup_commit_with_template()
 
744
        expected = tree.last_revision()
 
745
        out, err = self.run_bzr_error(["empty commit message"],
 
746
            "commit tree/hello.txt", stdin="n\n")
 
747
        self.assertEqual(expected, tree.last_revision())
 
748
 
 
749
    def test_commit_without_username(self):
 
750
        """Ensure commit error if username is not set.
 
751
        """
 
752
        self.run_bzr(['init', 'foo'])
 
753
        os.chdir('foo')
 
754
        open('foo.txt', 'w').write('hello')
 
755
        self.run_bzr(['add'])
 
756
        osutils.set_or_unset_env('EMAIL', None)
 
757
        osutils.set_or_unset_env('BZR_EMAIL', None)
 
758
        out, err = self.run_bzr(['commit', '-m', 'initial'], 3)
 
759
        self.assertContainsRe(err, 'Unable to determine your name')