revlog: abort on attempt to write null revision

My repo got corrupted yesterday by something that ended up writing the
null revision to the revlog (nullid hash, not nullrev index, of
course).  We use many extensions internally (narrowhg, remotefilelog,
evolve, internal extensions) and treemanifests are on. The null
revision was written to the changelog, the root manifest log, and one
subdirectory manifest log. I have no idea exactly why the null
revision was written, but it seems cheap enough to check that we
should fail instead of corrupting the repo.

Differential Revision: https://phab.mercurial-scm.org/D522
This commit is contained in:
Martin von Zweigbergk 2017-08-25 15:50:07 -07:00
parent 17b65783ad
commit 9255a8ef24

View File

@ -1694,6 +1694,9 @@ class revlog(object):
- rawtext is optional (can be None); if not set, cachedelta must be set.
if both are set, they must correspond to each other.
"""
if node == nullid:
raise RevlogError(_("%s: attempt to add null revision") %
(self.indexfile))
btext = [rawtext]
def buildtext():
if btext[0] is not None: