diff mercurial/revlog.py @ 6144:08e0825b8106

revlog.revision: avoid opening the datafile without need. If there's no inline data, revlog.revision opens the data file every time it's called. This is useful if we're going to call chunk many times, but, if we're going to call it only once, it's better to let chunk open the file - if we're lucky, all the data we're going to need is already cached and we won't need to even look at the file.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Tue, 19 Feb 2008 19:20:10 -0300
parents b9a830fa10f6
children f89fd07fc51d
line wrap: on
line diff
--- a/mercurial/revlog.py	Tue Feb 19 10:53:40 2008 -0800
+++ b/mercurial/revlog.py	Tue Feb 19 19:20:10 2008 -0300
@@ -933,19 +933,19 @@
             raise RevlogError(_('incompatible revision flag %x') %
                               (self.index[rev][0] & 0xFFFF))
 
-        if self._inline:
-            # we probably have the whole chunk cached
-            df = None
-        else:
-            df = self.opener(self.datafile)
+        df = None
 
         # do we have useful data cached?
         if self._cache and self._cache[1] >= base and self._cache[1] < rev:
             base = self._cache[1]
             text = str(self._cache[2])
             self._loadindex(base, rev + 1)
+            if not self._inline and rev > base + 1:
+                df = self.opener(self.datafile)
         else:
             self._loadindex(base, rev + 1)
+            if not self._inline and rev > base:
+                df = self.opener(self.datafile)
             text = self.chunk(base, df=df)
 
         bins = [self.chunk(r, df) for r in xrange(base + 1, rev + 1)]