[PATCH] revlog: add exception when linkrev == nullrev

Durham Goode durham at fb.com
Mon Jun 17 21:47:03 CDT 2013

# HG changeset patch
# User Durham Goode <durham at fb.com>
# Date 1371523440 25200
#      Mon Jun 17 19:44:00 2013 -0700
# Node ID 275d78d339cc7d954952f9a17ecaad4d098073ff
# Parent  2d03c8da7d981a101c5f4d8dd5f9a55eb778033f
revlog: add exception when linkrev == nullrev

When we deployed the latest crew mercurial to our users, a few of them
had issues where a filelog would have an entry with a -1 linkrev. This
caused operations like rebase and amend to create a bundle containing the
entire repository, which took a long time.

I don't know what the issue is, but adding this check should prevent repos
from getting in this state, and should help us pinpoint the issue next time
it happens.

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -991,6 +991,9 @@
         p1, p2 - the parent nodeids of the revision
         cachedelta - an optional precomputed delta
+        if link == nullrev:
+            raise RevlogError(_("attempted to add linkrev -1 to %s")
+                              % self.indexfile)
         node = hash(text, p1, p2)
         if node in self.nodemap:
             return node

More information about the Mercurial-devel mailing list