~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_commit.py

  • Committer: John Arbash Meinel
  • Date: 2008-09-05 02:29:34 UTC
  • mto: (3697.7.4 1.7)
  • mto: This revision was merged to the branch mainline in revision 3748.
  • Revision ID: john@arbash-meinel.com-20080905022934-s8692mbwpkdwi106
Cleanups to the algorithm documentation.

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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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_missing_commit(self):
111
 
        """Test a commit with a missing file"""
 
110
    def test_delete_commit(self):
 
111
        """Test a commit with a deleted 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
 
        expected = set([
 
553
        self.assertEqual([
 
554
            ('change', 'unchanged', ''),
 
555
            ('change', 'unchanged', 'dirtoleave'),
 
556
            ('change', 'unchanged', 'filetoleave'),
554
557
            ('change', 'modified', 'filetomodify'),
555
558
            ('change', 'added', 'newdir'),
556
559
            ('change', 'added', 'newfile'),
560
563
            ('renamed', 'renamed', 'filetoreparent', 'renameddir/reparentedfile'),
561
564
            ('deleted', 'dirtoremove'),
562
565
            ('deleted', 'filetoremove'),
563
 
            ])
564
 
        result = set(reporter.calls)
565
 
        missing = expected - result
566
 
        new = result - expected
567
 
        self.assertEqual((set(), set()), (missing, new))
 
566
            ],
 
567
            reporter.calls)
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)
751
750
 
752
751
    def test_commit_author(self):
753
752
        """Passing a non-empty author kwarg to MutableTree.commit should add
754
753
        the 'author' revision property.
755
754
        """
756
755
        tree = self.make_branch_and_tree('foo')
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>')
 
756
        rev_id = tree.commit('commit 1', author='John Doe <jdoe@example.com>')
760
757
        rev = tree.branch.repository.get_revision(rev_id)
761
758
        self.assertEqual('John Doe <jdoe@example.com>',
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>'])
 
759
                         rev.properties['author'])
794
760
 
795
761
    def test_commit_with_checkout_and_branch_sharing_repo(self):
796
762
        repo = self.make_repository('repo', shared=True)