/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/repository_implementations/test_commit_builder.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-08-08 00:28:10 UTC
  • mfrom: (2617.6.9 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20070808002810-703n3mr6b6hwataj
(robertc) Introduce write_groups for repositories, allowing repositories with the physical ability to do transactional data insertion to have that modelled within bzr. (Robert Collins).

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
class TestCommitBuilder(TestCaseWithRepository):
27
27
 
28
28
    def test_get_commit_builder(self):
29
 
        tree = self.make_branch_and_tree(".")
30
 
        builder = tree.branch.get_commit_builder([])
 
29
        branch = self.make_branch('.')
 
30
        branch.repository.lock_write()
 
31
        builder = branch.repository.get_commit_builder(
 
32
            branch, [], branch.get_config())
31
33
        self.assertIsInstance(builder, CommitBuilder)
 
34
        branch.repository.commit_write_group()
 
35
        branch.repository.unlock()
32
36
 
33
37
    def record_root(self, builder, tree):
34
38
        if builder.record_root_entry is True:
43
47
 
44
48
    def test_finish_inventory(self):
45
49
        tree = self.make_branch_and_tree(".")
46
 
        builder = tree.branch.get_commit_builder([])
47
 
        self.record_root(builder, tree)
48
 
        builder.finish_inventory()
 
50
        tree.lock_write()
 
51
        try:
 
52
            builder = tree.branch.get_commit_builder([])
 
53
            self.record_root(builder, tree)
 
54
            builder.finish_inventory()
 
55
            tree.branch.repository.commit_write_group()
 
56
        finally:
 
57
            tree.unlock()
49
58
 
50
59
    def test_commit_message(self):
51
60
        tree = self.make_branch_and_tree(".")
52
 
        builder = tree.branch.get_commit_builder([])
53
 
        self.record_root(builder, tree)
54
 
        builder.finish_inventory()
55
 
        rev_id = builder.commit('foo bar blah')
 
61
        tree.lock_write()
 
62
        try:
 
63
            builder = tree.branch.get_commit_builder([])
 
64
            self.record_root(builder, tree)
 
65
            builder.finish_inventory()
 
66
            rev_id = builder.commit('foo bar blah')
 
67
        finally:
 
68
            tree.unlock()
56
69
        rev = tree.branch.repository.get_revision(rev_id)
57
70
        self.assertEqual('foo bar blah', rev.message)
58
71
 
59
72
    def test_commit_with_revision_id(self):
60
73
        tree = self.make_branch_and_tree(".")
61
 
        # use a unicode revision id to test more corner cases.
62
 
        # The repository layer is meant to handle this.
63
 
        revision_id = u'\xc8abc'.encode('utf8')
 
74
        tree.lock_write()
64
75
        try:
 
76
            # use a unicode revision id to test more corner cases.
 
77
            # The repository layer is meant to handle this.
 
78
            revision_id = u'\xc8abc'.encode('utf8')
65
79
            try:
66
 
                builder = tree.branch.get_commit_builder([],
67
 
                    revision_id=revision_id)
68
 
            except NonAsciiRevisionId:
69
 
                revision_id = 'abc'
70
 
                builder = tree.branch.get_commit_builder([],
71
 
                    revision_id=revision_id)
72
 
        except CannotSetRevisionId:
73
 
            # This format doesn't support supplied revision ids
74
 
            return
75
 
        self.record_root(builder, tree)
76
 
        builder.finish_inventory()
77
 
        self.assertEqual(revision_id, builder.commit('foo bar'))
 
80
                try:
 
81
                    builder = tree.branch.get_commit_builder([],
 
82
                        revision_id=revision_id)
 
83
                except NonAsciiRevisionId:
 
84
                    revision_id = 'abc'
 
85
                    builder = tree.branch.get_commit_builder([],
 
86
                        revision_id=revision_id)
 
87
            except CannotSetRevisionId:
 
88
                # This format doesn't support supplied revision ids
 
89
                return
 
90
            self.record_root(builder, tree)
 
91
            builder.finish_inventory()
 
92
            self.assertEqual(revision_id, builder.commit('foo bar'))
 
93
        finally:
 
94
            tree.unlock()
78
95
        self.assertTrue(tree.branch.repository.has_revision(revision_id))
79
96
        # the revision id must be set on the inventory when saving it. This
80
97
        # does not precisely test that - a repository that wants to can add it
86
103
    def test_commit_without_root(self):
87
104
        """This should cause a deprecation warning, not an assertion failure"""
88
105
        tree = self.make_branch_and_tree(".")
89
 
        if tree.branch.repository.supports_rich_root():
90
 
            raise tests.TestSkipped('Format requires root')
91
 
        self.build_tree(['foo'])
92
 
        tree.add('foo', 'foo-id')
93
106
        tree.lock_write()
94
107
        try:
 
108
            if tree.branch.repository.supports_rich_root():
 
109
                raise tests.TestSkipped('Format requires root')
 
110
            self.build_tree(['foo'])
 
111
            tree.add('foo', 'foo-id')
95
112
            entry = tree.inventory['foo-id']
96
113
            builder = tree.branch.get_commit_builder([])
97
114
            self.callDeprecated(['Root entry should be supplied to'
104
121
 
105
122
    def test_commit(self):
106
123
        tree = self.make_branch_and_tree(".")
107
 
        builder = tree.branch.get_commit_builder([])
108
 
        self.record_root(builder, tree)
109
 
        builder.finish_inventory()
110
 
        rev_id = builder.commit('foo bar')
 
124
        tree.lock_write()
 
125
        try:
 
126
            builder = tree.branch.get_commit_builder([])
 
127
            self.record_root(builder, tree)
 
128
            builder.finish_inventory()
 
129
            rev_id = builder.commit('foo bar')
 
130
        finally:
 
131
            tree.unlock()
111
132
        self.assertNotEqual(None, rev_id)
112
133
        self.assertTrue(tree.branch.repository.has_revision(rev_id))
113
134
        # the revision id must be set on the inventory when saving it. This does not
117
138
 
118
139
    def test_revision_tree(self):
119
140
        tree = self.make_branch_and_tree(".")
120
 
        builder = tree.branch.get_commit_builder([])
121
 
        self.record_root(builder, tree)
122
 
        builder.finish_inventory()
123
 
        rev_id = builder.commit('foo bar')
 
141
        tree.lock_write()
 
142
        try:
 
143
            builder = tree.branch.get_commit_builder([])
 
144
            self.record_root(builder, tree)
 
145
            builder.finish_inventory()
 
146
            rev_id = builder.commit('foo bar')
 
147
        finally:
 
148
            tree.unlock()
124
149
        rev_tree = builder.revision_tree()
125
150
        # Just a couple simple tests to ensure that it actually follows
126
151
        # the RevisionTree api.