~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Andrew Bennetts
  • Date: 2011-02-25 08:45:27 UTC
  • mto: This revision was merged to the branch mainline in revision 5695.
  • Revision ID: andrew.bennetts@canonical.com-20110225084527-0ucp7p00d00hoqon
Add another test.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006-2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
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 (
 
25
    bzrdir,
24
26
    osutils,
25
27
    ignores,
26
28
    msgeditor,
31
33
from bzrlib.tests import (
32
34
    probe_bad_non_ascii,
33
35
    TestSkipped,
 
36
    UnicodeFilenameFeature,
34
37
    )
35
 
from bzrlib.tests.blackbox import ExternalBase
36
 
 
37
 
 
38
 
class TestCommit(ExternalBase):
 
38
from bzrlib.tests import TestCaseWithTransport
 
39
 
 
40
 
 
41
class TestCommit(TestCaseWithTransport):
39
42
 
40
43
    def test_05_empty_commit(self):
41
44
        """Commit of tree with no versioned files should fail"""
107
110
                              'modified hello\.txt\n'
108
111
                              'Committed revision 2\.\n$')
109
112
 
 
113
    def test_unicode_commit_message_is_filename(self):
 
114
        """Unicode commit message same as a filename (Bug #563646).
 
115
        """
 
116
        self.requireFeature(UnicodeFilenameFeature)
 
117
        file_name = u'\N{euro sign}'
 
118
        self.run_bzr(['init'])
 
119
        open(file_name, 'w').write('hello world')
 
120
        self.run_bzr(['add'])
 
121
        out, err = self.run_bzr(['commit', '-m', file_name])
 
122
        reflags = re.MULTILINE|re.DOTALL|re.UNICODE
 
123
        te = osutils.get_terminal_encoding()
 
124
        self.assertContainsRe(err.decode(te),
 
125
            u'The commit message is a file name:',
 
126
            flags=reflags)
 
127
 
 
128
        # Run same test with a filename that causes encode
 
129
        # error for the terminal encoding. We do this
 
130
        # by forcing terminal encoding of ascii for
 
131
        # osutils.get_terminal_encoding which is used
 
132
        # by ui.text.show_warning
 
133
        default_get_terminal_enc = osutils.get_terminal_encoding
 
134
        try:
 
135
            osutils.get_terminal_encoding = lambda trace=None: 'ascii'
 
136
            file_name = u'foo\u1234'
 
137
            open(file_name, 'w').write('hello world')
 
138
            self.run_bzr(['add'])
 
139
            out, err = self.run_bzr(['commit', '-m', file_name])
 
140
            reflags = re.MULTILINE|re.DOTALL|re.UNICODE
 
141
            te = osutils.get_terminal_encoding()
 
142
            self.assertContainsRe(err.decode(te, 'replace'),
 
143
                u'The commit message is a file name:',
 
144
                flags=reflags)
 
145
        finally:
 
146
            osutils.get_terminal_encoding = default_get_terminal_enc
 
147
 
110
148
    def test_warn_about_forgotten_commit_message(self):
111
149
        """Test that the lack of -m parameter is caught"""
112
150
        wt = self.make_branch_and_tree('.')
663
701
        self.assertContainsRe(err, r'modified test\nCommitted revision 2.')
664
702
 
665
703
    def test_commit_readonly_checkout(self):
666
 
        # https://bugs.edge.launchpad.net/bzr/+bug/129701
 
704
        # https://bugs.launchpad.net/bzr/+bug/129701
667
705
        # "UnlockableTransport error trying to commit in checkout of readonly
668
706
        # branch"
669
707
        self.make_branch('master')
681
719
            f = file('fed.bat', 'w')
682
720
            f.write('@rem dummy fed')
683
721
            f.close()
684
 
            osutils.set_or_unset_env('BZR_EDITOR', "fed.bat")
 
722
            self.overrideEnv('BZR_EDITOR', "fed.bat")
685
723
        else:
686
724
            f = file('fed.sh', 'wb')
687
725
            f.write('#!/bin/sh\n')
688
726
            f.close()
689
727
            os.chmod('fed.sh', 0755)
690
 
            osutils.set_or_unset_env('BZR_EDITOR', "./fed.sh")
 
728
            self.overrideEnv('BZR_EDITOR', "./fed.sh")
691
729
 
692
730
    def setup_commit_with_template(self):
693
731
        self.setup_editor()
710
748
        out, err = self.run_bzr_error(["empty commit message"],
711
749
            "commit tree/hello.txt", stdin="n\n")
712
750
        self.assertEqual(expected, tree.last_revision())
 
751
 
 
752
    def test_commit_without_username(self):
 
753
        """Ensure commit error if username is not set.
 
754
        """
 
755
        self.run_bzr(['init', 'foo'])
 
756
        os.chdir('foo')
 
757
        open('foo.txt', 'w').write('hello')
 
758
        self.run_bzr(['add'])
 
759
        self.overrideEnv('EMAIL', None)
 
760
        self.overrideEnv('BZR_EMAIL', None)
 
761
        out, err = self.run_bzr(['commit', '-m', 'initial'], 3)
 
762
        self.assertContainsRe(err, 'Unable to determine your name')
 
763
 
 
764
    def test_commit_recursive_checkout(self):
 
765
        """Ensure that a commit to a recursive checkout fails cleanly.
 
766
        """
 
767
        self.run_bzr(['init', 'test_branch'])
 
768
        self.run_bzr(['checkout', 'test_branch', 'test_checkout'])
 
769
        os.chdir('test_checkout')
 
770
        self.run_bzr(['bind', '.']) # bind to self
 
771
        open('foo.txt', 'w').write('hello')
 
772
        self.run_bzr(['add'])
 
773
        out, err = self.run_bzr(['commit', '-m', 'addedfoo'], 3)
 
774
        self.assertEqual(out, '')
 
775
        self.assertContainsRe(err,
 
776
            'Branch.*test_checkout.*appears to be bound to itself')
 
777