60
60
new_revno, new_revid, local_locked, master.is_locked()))
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':
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))
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, {})
137
144
tree.lock_write()
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]
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], {})
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']} )