Mercurial > public > mercurial-scm > hg-stable
diff mercurial/localrepo.py @ 23129:eb315418224c stable
hook: protect commit hooks against stripping of temporary commit (issue4422)
History rewriting commands like histedit tend to use temporary
commits. They may schedule hook execution on these temporary commits
for after the lock has been released. But temporary commits are likely
to have been stripped before the lock is released (and the hook run).
Hook executed for missing revisions leads to various crashes.
We disable hooks execution for revision missing in the repo. This
provides a dirty but simple fix to user issues.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Sat, 01 Nov 2014 23:17:50 +0000 |
parents | 8b4a8a9176e2 |
children | 3872d563e01a 53a65929ef1f |
line wrap: on
line diff
--- a/mercurial/localrepo.py Sat Nov 01 22:59:37 2014 +0000 +++ b/mercurial/localrepo.py Sat Nov 01 23:17:50 2014 +0000 @@ -1370,7 +1370,11 @@ wlock.release() def commithook(node=hex(ret), parent1=hookp1, parent2=hookp2): - self.hook("commit", node=node, parent1=parent1, parent2=parent2) + # hack for command that use a temporary commit (eg: histedit) + # temporary commit got stripped before hook release + if node in self: + self.hook("commit", node=node, parent1=parent1, + parent2=parent2) self._afterlock(commithook) return ret