/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/branch_implementations/test_commit.py

Changed ``pre_commit`` hook signature.

The hook's signature is now

  ::

    hook(local, master, old_revno, old_revid, new_revno, new_revid,
         affected_ids, future_revision_tree)

``affected_ids`` is a dictionary of (change_type, ids). change_type is
a string describing the change (e.g. 'added', 'deleted', 'modified'), and
ids is a list of inventory entry ids.

Hooks can get an added file easier than before:

  ::

    for id in affected_ids.get('added', []):
        if future_revision_tree.kind(id) == 'file':
            file = future_revision_tree.get_file(id)
            ...

Show diffs side-by-side

added added

removed removed

Lines of Context:
60
60
             new_revno, new_revid, local_locked, master.is_locked()))
61
61
 
62
62
    def capture_pre_commit_hook(self, local, master, old_revno, old_revid,
63
 
                                new_revno, new_revid, deleted, added, tree):
 
63
                                new_revno, new_revid, affected, tree):
 
64
        # replacing ids with paths
 
65
        # notice that we leave deleted ids in tact
 
66
        for change, ids in affected.iteritems():
 
67
            if change == 'deleted':
 
68
                continue
 
69
            for i, id in enumerate(ids):
 
70
                ids[i] = tree.id2path(id)
64
71
        self.hook_calls.append(('pre_commit', old_revno, old_revid,
65
 
                                new_revno, new_revid, deleted, added))
 
72
                                new_revno, new_revid, affected))
66
73
 
67
74
    def test_post_commit_to_origin(self):
68
75
        tree = self.make_branch_and_memory_tree('branch')
126
133
        revid1 = tree.commit('first revision')
127
134
        revid2 = tree.commit('second revision')
128
135
        self.assertEqual([
129
 
            ('pre_commit', 0, NULL_REVISION, 1, revid1, [], []),
130
 
            ('pre_commit', 1, revid1, 2, revid2, [], [])
 
136
            ('pre_commit', 0, NULL_REVISION, 1, revid1, {}),
 
137
            ('pre_commit', 1, revid1, 2, revid2, {})
131
138
            ],
132
139
            self.hook_calls)
133
140
        tree.unlock()
137
144
        tree.lock_write()
138
145
        tree.add('')
139
146
        class PreCommitException(Exception): pass
140
 
        def hook_func(_1, _2, _3, _4, _5, new_revid, _7, _8, _9):
 
147
        def hook_func(_1, _2, _3, _4, _5, new_revid, _7, _8):
141
148
            raise PreCommitException(new_revid)
142
149
        Branch.hooks.install_hook("pre_commit", self.capture_pre_commit_hook)
143
150
        Branch.hooks.install_hook("pre_commit", hook_func)
144
151
        revids = [None, None, None]
145
 
        try:
146
 
            tree.commit('message')
147
 
        except PreCommitException, e:
148
 
            revids[0] = e.message
 
152
        # this commit will raise exception
 
153
        # so the commit is rollbacked and revno unchanged
 
154
        err = self.assertRaises(PreCommitException, tree.commit, 'message')
 
155
        # we have to record the revid to use in assertEqual later
 
156
        revids[0] = err.message
 
157
        # unregister all pre_commit hooks
149
158
        Branch.hooks["pre_commit"] = []
 
159
        # and re-register the capture hook
150
160
        Branch.hooks.install_hook("pre_commit", self.capture_pre_commit_hook)
 
161
        # now these commits should go through
151
162
        for i in range(1, 3):
152
 
            revids[i] = tree.commit('third revision')
 
163
            revids[i] = tree.commit('message')
153
164
        self.assertEqual([
154
 
            ('pre_commit', 0, NULL_REVISION, 1, revids[0], [], []),
155
 
            ('pre_commit', 0, NULL_REVISION, 1, revids[1], [], []),
156
 
            ('pre_commit', 1, revids[1], 2, revids[2], [], [])
 
165
            ('pre_commit', 0, NULL_REVISION, 1, revids[0], {}),
 
166
            ('pre_commit', 0, NULL_REVISION, 1, revids[1], {}),
 
167
            ('pre_commit', 1, revids[1], 2, revids[2], {})
157
168
            ],
158
169
            self.hook_calls)
159
170
        tree.unlock()
172
183
        tree.unversion(['dirid'])
173
184
        rev2 = tree.commit('second revision')
174
185
        self.assertEqual([
175
 
            ('pre_commit', 0, NULL_REVISION, 1, rev1, [], ['dir', 'dir/file', 'file']),
176
 
            ('pre_commit', 1, rev1, 2, rev2, ['dir', 'dir/file'], [])
 
186
            ('pre_commit', 0, NULL_REVISION, 1, rev1,
 
187
             {'added': ['dir', 'dir/file', 'file']} ),
 
188
            ('pre_commit', 1, rev1, 2, rev2,
 
189
             {'deleted': ['dirid', 'swoosh']} )
177
190
            ],
178
191
            self.hook_calls)
179
192
        tree.unlock()