~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_commit.py

  • Committer: Matt Nordhoff
  • Date: 2009-04-04 02:50:01 UTC
  • mfrom: (4253 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4256.
  • Revision ID: mnordhoff@mattnordhoff.com-20090404025001-z1403k0tatmc8l91
Merge bzr.dev, fixing conflicts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
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
16
16
 
17
17
 
18
18
import os
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,
33
33
                           LockContention)
34
34
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
35
35
from bzrlib.workingtree import WorkingTree
107
107
        tree2.unlock()
108
108
        self.assertEqual('version 2', text)
109
109
 
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('.')
113
113
        b = wt.branch
114
114
        file('hello', 'w').write('hello world')
125
125
        """Test a partial commit where a file was renamed but not committed.
126
126
 
127
127
        https://bugs.launchpad.net/bzr/+bug/83039
128
 
        
 
128
 
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.
132
132
        """
133
133
        wt = self.make_branch_and_tree('.')
154
154
                          message='fails',
155
155
                          allow_pointless=False)
156
156
        self.assertEquals(b.revno(), 1)
157
 
        
 
157
 
158
158
    def test_commit_empty(self):
159
159
        """Commiting an empty tree works."""
160
160
        wt = self.make_branch_and_tree('.')
177
177
              ['hello-id', 'buongia-id'])
178
178
        wt.commit(message='add files',
179
179
                 rev_id='test@rev-1')
180
 
        
 
180
 
181
181
        os.remove('hello')
182
182
        file('buongia', 'w').write('new text')
183
183
        wt.commit(message='update text',
199
199
        self.assertTrue(tree2.has_filename('hello'))
200
200
        self.assertEquals(tree2.get_file_text('hello-id'), 'hello')
201
201
        self.assertEquals(tree2.get_file_text('buongia-id'), 'new text')
202
 
        
 
202
 
203
203
        tree3 = b.repository.revision_tree('test@rev-3')
204
204
        tree3.lock_read()
205
205
        self.addCleanup(tree3.unlock)
501
501
        bound_tree.commit(message='commit of merge in bound tree')
502
502
 
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)
553
 
        self.assertEqual([
554
 
            ('change', 'unchanged', ''),
555
 
            ('change', 'unchanged', 'dirtoleave'),
556
 
            ('change', 'unchanged', 'filetoleave'),
 
553
        expected = set([
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'),
566
 
            ],
567
 
            reporter.calls)
 
563
            ])
 
564
        result = set(reporter.calls)
 
565
        missing = expected - result
 
566
        new = result - expected
 
567
        self.assertEqual((set(), set()), (missing, new))
568
568
 
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'])
665
665
 
666
666
    class Callback(object):
667
 
        
 
667
 
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)
704
704
 
738
738
        tree.add('a/c/d')
739
739
        tree.rename_one('a/z/x', 'a/c/d/x')
740
740
        tree.commit('test', specific_files=['a/z/y'])
741
 
 
 
741
 
742
742
    def test_commit_no_author(self):
743
743
        """The default kwarg author in MutableTree.commit should not add
744
744
        the 'author' revision property.
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)
750
751
 
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.
754
755
        """
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)
 
764
 
 
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)
 
772
 
 
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)
 
782
 
 
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>")
 
789
 
 
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>'])
760
794
 
761
795
    def test_commit_with_checkout_and_branch_sharing_repo(self):
762
796
        repo = self.make_repository('repo', shared=True)