/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2006 Canonical Ltd
1740.3.1 by Jelmer Vernooij
Introduce and use CommitBuilder objects.
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
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
16
17
"""Tests for repository commit builder."""
18
1910.2.6 by Aaron Bentley
Update for merge review, handle deprecations
19
from bzrlib import inventory
2150.2.2 by Robert Collins
Change the commit builder selected-revision-id test to use a unicode revision id where possible, leading to stricter testing of the hypothetical unicode revision id support in bzr.
20
from bzrlib.errors import NonAsciiRevisionId, CannotSetRevisionId
1740.3.1 by Jelmer Vernooij
Introduce and use CommitBuilder objects.
21
from bzrlib.repository import CommitBuilder
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
22
from bzrlib import tests
1740.3.1 by Jelmer Vernooij
Introduce and use CommitBuilder objects.
23
from bzrlib.tests.repository_implementations.test_repository import TestCaseWithRepository
24
25
26
class TestCommitBuilder(TestCaseWithRepository):
1740.3.3 by Jelmer Vernooij
Move storing directories and links to commit builder.
27
1740.3.10 by Jelmer Vernooij
Fix some minor issues pointed out by j-a-m.
28
    def test_get_commit_builder(self):
1740.3.7 by Jelmer Vernooij
Move committer, log, revprops, timestamp and timezone to CommitBuilder.
29
        tree = self.make_branch_and_tree(".")
30
        builder = tree.branch.get_commit_builder([])
1740.3.1 by Jelmer Vernooij
Introduce and use CommitBuilder objects.
31
        self.assertIsInstance(builder, CommitBuilder)
1740.3.3 by Jelmer Vernooij
Move storing directories and links to commit builder.
32
1910.2.6 by Aaron Bentley
Update for merge review, handle deprecations
33
    def record_root(self, builder, tree):
34
        if builder.record_root_entry is True:
35
            ie = tree.inventory.root
36
            parent_tree = tree.branch.repository.revision_tree(None)
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
37
            parent_invs = []
1910.2.6 by Aaron Bentley
Update for merge review, handle deprecations
38
            builder.record_entry_contents(ie, parent_invs, '', tree)
1731.1.33 by Aaron Bentley
Revert no-special-root changes
39
1740.3.10 by Jelmer Vernooij
Fix some minor issues pointed out by j-a-m.
40
    def test_finish_inventory(self):
1740.3.7 by Jelmer Vernooij
Move committer, log, revprops, timestamp and timezone to CommitBuilder.
41
        tree = self.make_branch_and_tree(".")
42
        builder = tree.branch.get_commit_builder([])
1910.2.6 by Aaron Bentley
Update for merge review, handle deprecations
43
        self.record_root(builder, tree)
1740.3.8 by Jelmer Vernooij
Move make_revision() to commit builder.
44
        builder.finish_inventory()
1740.3.3 by Jelmer Vernooij
Move storing directories and links to commit builder.
45
1740.3.10 by Jelmer Vernooij
Fix some minor issues pointed out by j-a-m.
46
    def test_commit_message(self):
1740.3.7 by Jelmer Vernooij
Move committer, log, revprops, timestamp and timezone to CommitBuilder.
47
        tree = self.make_branch_and_tree(".")
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
48
        builder = tree.branch.get_commit_builder([])
1910.2.6 by Aaron Bentley
Update for merge review, handle deprecations
49
        self.record_root(builder, tree)
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
50
        builder.finish_inventory()
51
        rev_id = builder.commit('foo bar blah')
52
        rev = tree.branch.repository.get_revision(rev_id)
53
        self.assertEqual('foo bar blah', rev.message)
54
1740.3.10 by Jelmer Vernooij
Fix some minor issues pointed out by j-a-m.
55
    def test_commit_with_revision_id(self):
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
56
        tree = self.make_branch_and_tree(".")
2150.2.2 by Robert Collins
Change the commit builder selected-revision-id test to use a unicode revision id where possible, leading to stricter testing of the hypothetical unicode revision id support in bzr.
57
        # use a unicode revision id to test more corner cases.
58
        # The repository layer is meant to handle this.
2249.5.12 by John Arbash Meinel
Change the APIs for VersionedFile, Store, and some of Repository into utf-8
59
        revision_id = u'\xc8abc'.encode('utf8')
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
60
        try:
2150.2.2 by Robert Collins
Change the commit builder selected-revision-id test to use a unicode revision id where possible, leading to stricter testing of the hypothetical unicode revision id support in bzr.
61
            try:
62
                builder = tree.branch.get_commit_builder([],
63
                    revision_id=revision_id)
64
            except NonAsciiRevisionId:
65
                revision_id = 'abc'
66
                builder = tree.branch.get_commit_builder([],
67
                    revision_id=revision_id)
68
        except CannotSetRevisionId:
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
69
            # This format doesn't support supplied revision ids
70
            return
1910.2.6 by Aaron Bentley
Update for merge review, handle deprecations
71
        self.record_root(builder, tree)
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
72
        builder.finish_inventory()
2150.2.2 by Robert Collins
Change the commit builder selected-revision-id test to use a unicode revision id where possible, leading to stricter testing of the hypothetical unicode revision id support in bzr.
73
        self.assertEqual(revision_id, builder.commit('foo bar'))
74
        self.assertTrue(tree.branch.repository.has_revision(revision_id))
75
        # the revision id must be set on the inventory when saving it. This
76
        # does not precisely test that - a repository that wants to can add it
77
        # on deserialisation, but thats all the current contract guarantees
78
        # anyway.
79
        self.assertEqual(revision_id,
80
            tree.branch.repository.get_inventory(revision_id).revision_id)
1740.3.8 by Jelmer Vernooij
Move make_revision() to commit builder.
81
1910.2.8 by Aaron Bentley
Fix commit_builder when root not passed to record_entry_contents
82
    def test_commit_without_root(self):
83
        """This should cause a deprecation warning, not an assertion failure"""
84
        tree = self.make_branch_and_tree(".")
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
85
        if tree.branch.repository._format.rich_root_data:
86
            raise tests.TestSkipped('Format requires root')
1910.2.8 by Aaron Bentley
Fix commit_builder when root not passed to record_entry_contents
87
        self.build_tree(['foo'])
88
        tree.add('foo', 'foo-id')
89
        entry = tree.inventory['foo-id']
90
        builder = tree.branch.get_commit_builder([])
1551.8.9 by Aaron Bentley
Rename assertDeprecated to callDeprecated
91
        self.callDeprecated(['Root entry should be supplied to'
1982.3.2 by Robert Collins
New TestCase helper applyDeprecated. This allows you to call a callable
92
            ' record_entry_contents, as of bzr 0.10.'],
1910.2.9 by Aaron Bentley
Inroduce assertDeprecated, and use it to test old commitbuilder API
93
            builder.record_entry_contents, entry, [], 'foo', tree)
1910.2.8 by Aaron Bentley
Fix commit_builder when root not passed to record_entry_contents
94
        builder.finish_inventory()
95
        rev_id = builder.commit('foo bar')
96
1740.3.10 by Jelmer Vernooij
Fix some minor issues pointed out by j-a-m.
97
    def test_commit(self):
1740.3.8 by Jelmer Vernooij
Move make_revision() to commit builder.
98
        tree = self.make_branch_and_tree(".")
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
99
        builder = tree.branch.get_commit_builder([])
1910.2.6 by Aaron Bentley
Update for merge review, handle deprecations
100
        self.record_root(builder, tree)
1740.3.8 by Jelmer Vernooij
Move make_revision() to commit builder.
101
        builder.finish_inventory()
1740.3.9 by Jelmer Vernooij
Make the commit message the first argument of CommitBuilder.commit().
102
        rev_id = builder.commit('foo bar')
103
        self.assertNotEqual(None, rev_id)
104
        self.assertTrue(tree.branch.repository.has_revision(rev_id))
1757.1.2 by Robert Collins
Bugfix CommitBuilders recording of the inventory revision id.
105
        # the revision id must be set on the inventory when saving it. This does not
106
        # precisely test that - a repository that wants to can add it on deserialisation,
107
        # but thats all the current contract guarantees anyway.
108
        self.assertEqual(rev_id, tree.branch.repository.get_inventory(rev_id).revision_id)
2041.1.1 by John Arbash Meinel
Add a 'get_tree()' call that returns a RevisionTree for the newly committed tree
109
2041.1.5 by John Arbash Meinel
CommitBuilder.get_tree => CommitBuilder.revision_tree
110
    def test_revision_tree(self):
2041.1.1 by John Arbash Meinel
Add a 'get_tree()' call that returns a RevisionTree for the newly committed tree
111
        tree = self.make_branch_and_tree(".")
112
        builder = tree.branch.get_commit_builder([])
113
        self.record_root(builder, tree)
114
        builder.finish_inventory()
115
        rev_id = builder.commit('foo bar')
2041.1.5 by John Arbash Meinel
CommitBuilder.get_tree => CommitBuilder.revision_tree
116
        rev_tree = builder.revision_tree()
2041.1.1 by John Arbash Meinel
Add a 'get_tree()' call that returns a RevisionTree for the newly committed tree
117
        # Just a couple simple tests to ensure that it actually follows
118
        # the RevisionTree api.
119
        self.assertEqual(rev_id, rev_tree.get_revision_id())
120
        self.assertEqual([], rev_tree.get_parent_ids())