changeset 26309:44918682093f

obsstore: delay loading markers from obsstore file This will allow us to use cached revisions without parsing obsstore. Because _version isn't determined at __init__, the debugobsconvert command no longer works correctly. I'll fix it by a separate patch for the evolve extension.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 13 Sep 2015 17:52:37 +0900
parents f2788794183a
children 61efe9ef6ad4
files mercurial/obsolete.py
diffstat 1 files changed, 10 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/obsolete.py	Sun Sep 13 17:47:18 2015 +0900
+++ b/mercurial/obsolete.py	Sun Sep 13 17:52:37 2015 +0900
@@ -520,16 +520,9 @@
     def __init__(self, svfs, defaultformat=_fm1version, readonly=False):
         # caches for various obsolescence related cache
         self.caches = {}
-        self._all = []
         self.svfs = svfs
-        data = svfs.tryread('obsstore')
         self._version = defaultformat
         self._readonly = readonly
-        if data:
-            self._version, markers = _readmarkers(data)
-            markers = list(markers)
-            _checkinvalidmarkers(markers)
-            self._all = markers
 
     def __iter__(self):
         return iter(self._all)
@@ -617,6 +610,16 @@
         return self.add(transaction, markers)
 
     @propertycache
+    def _all(self):
+        data = self.svfs.tryread('obsstore')
+        if not data:
+            return []
+        self._version, markers = _readmarkers(data)
+        markers = list(markers)
+        _checkinvalidmarkers(markers)
+        return markers
+
+    @propertycache
     def successors(self):
         successors = {}
         _addsuccessors(successors, self._all)