revlog.revision: avoid opening the datafile without need.
authorAlexis S. L. Carvalho <alexis@cecm.usp.br>
Tue, 19 Feb 2008 19:20:10 -0300
changeset 6144 08e0825b8106
parent 6143 5b159ebb19cf
child 6145 154f8be6272b
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.
mercurial/revlog.py
--- 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)]