mercurial/revlog.py
changeset 14296 62e25c63fb3a
parent 14292 c97d8485b5fa
child 14301 f94993769c87
--- a/mercurial/revlog.py	Mon May 09 15:16:56 2011 -0400
+++ b/mercurial/revlog.py	Thu May 12 13:47:17 2011 +0200
@@ -218,7 +218,7 @@
         self.datafile = indexfile[:-2] + ".d"
         self.opener = opener
         self._cache = None
-        self._basecache = None
+        self._basecache = (0, 0)
         self._chunkcache = (0, '')
         self.index = []
         self._pcache = {}
@@ -1010,8 +1010,7 @@
                 delta = mdiff.textdiff(ptext, t)
             data = compress(delta)
             l = len(data[1]) + len(data[0])
-            basecache = self._basecache
-            if basecache and basecache[0] == rev:
+            if basecache[0] == rev:
                 chainbase = basecache[1]
             else:
                 chainbase = self.chainbase(rev)
@@ -1020,14 +1019,15 @@
                 base = rev
             else:
                 base = chainbase
-            return dist, l, data, base
+            return dist, l, data, base, chainbase
 
         curr = len(self)
         prev = curr - 1
-        base = curr
+        base = chainbase = curr
         offset = self.end(prev)
         flags = 0
         d = None
+        basecache = self._basecache
         p1r, p2r = self.rev(p1), self.rev(p2)
 
         # should we try to build a delta?
@@ -1036,7 +1036,7 @@
                 d = builddelta(p1r)
             else:
                 d = builddelta(prev)
-            dist, l, data, base = d
+            dist, l, data, base, chainbase = d
 
         # full versions are inserted when the needed deltas
         # become comparable to the uncompressed text
@@ -1049,7 +1049,7 @@
             text = buildtext()
             data = compress(text)
             l = len(data[1]) + len(data[0])
-            base = curr
+            base = chainbase = curr
 
         e = (offset_type(offset, flags), l, textlen,
              base, link, p1r, p2r, node)
@@ -1075,7 +1075,7 @@
 
         if type(text) == str: # only accept immutable objects
             self._cache = (node, curr, text)
-        self._basecache = (curr, base)
+        self._basecache = (curr, chainbase)
         return node
 
     def group(self, nodelist, bundler):