changeset 73:ee1cbe841e01

Change revlog to use new patch code
author mpm@selenic.com
date Mon, 16 May 2005 22:10:02 -0800
parents 4a6ab4d80dc4
children 401e18c95ad3
files mercurial/revlog.py
diffstat 1 files changed, 17 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/revlog.py	Mon May 16 22:08:33 2005 -0800
+++ b/mercurial/revlog.py	Mon May 16 22:10:02 2005 -0800
@@ -35,19 +35,28 @@
         self.index = []
         self.opener = opener
         self.cache = None
-        self.nodemap = {nullid: -1}
         # read the whole index for now, handle on-demand later
         try:
             n = 0
             i = self.opener(self.indexfile).read()
             s = struct.calcsize(indexformat)
+
+            # preallocate arrays
+            l = len(i)/s
+            self.index = [None] * l
+            m = [None] * l
+            
             for f in xrange(0, len(i), s):
                 # offset, size, base, linkrev, p1, p2, nodeid
                 e = struct.unpack(indexformat, i[f:f + s])
-                self.nodemap[e[6]] = n
-                self.index.append(e)
+                self.index[n] = e
+                m[n] = (e[6], n)
                 n += 1
-        except IOError: pass
+
+            self.nodemap = dict(m)
+        except IOError:
+            self.nodemap = {}
+        self.nodemap[nullid] = -1
 
     def tip(self): return self.node(len(self.index) - 1)
     def count(self): return len(self.index)
@@ -87,6 +96,9 @@
     def diff(self, a, b):
         return mdiff.textdiff(a, b)
 
+    def patches(self, t, pl):
+        return mdiff.patches(t, pl)
+
     def revision(self, node):
         if node == nullid: return ""
         if self.cache and self.cache[0] == node: return self.cache[2]
@@ -388,7 +400,7 @@
                 dfh.flush()
                 ifh.flush()
                 text = self.revision(chain)
-                text = self.patch(text, delta)
+                text = self.patches(text, [delta])
                 chk = self.addrevision(text, transaction, link, p1, p2)
                 if chk != node:
                     raise "consistency error adding group"