[PATCH 06 of 12] Make addrevision fork overlay revlogs on first commit

Brendan Cully brendan at kublai.com
Tue Jan 2 15:42:18 CST 2007


# HG changeset patch
# User Brendan Cully <brendan at kublai.com>
# Date 1167777086 18000
# Node ID 1dcf6c30b7ef66af0d55386a8d059fe3a7cfc451
# Parent  579c2afa76e8e3e57e01f3432d20c7536a0e70f9
Make addrevision fork overlay revlogs on first commit.

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -958,7 +958,10 @@ class revlog(object):
         start, length = self.start(rev), self.length(rev)
         inline = self.inlinedata()
         if inline:
-            start += (rev + 1) * struct.calcsize(self.indexformat)
+            idxes = rev + 1
+            if self.overlay():
+                idxes -= self.startrev
+            start += idxes * struct.calcsize(self.indexformat)
         end = start + length
         def loadcache(df):
             cache_length = max(cachelen, length) # 4k
@@ -1104,6 +1107,9 @@ class revlog(object):
         p1, p2 - the parent nodeids of the revision
         d - an optional precomputed delta
         """
+        if self.parent and self.startrev == self.parent.count():
+            self.parent.fork(self.opener)
+            self.load()
         if not self.inlinedata():
             dfh = self.opener(self.datafile, "a")
         else:


More information about the Mercurial-devel mailing list