diff mercurial/localrepo.py @ 17124:f1b7683f3f95

obsolete: move obsolete markers read/write logic to obsstore object This is the first step toward incremental writing of obsolete marker within a transaction. For this purpose, obsstore is now given its repo sopener. This make it able to handles read and write to the obsstore file itself. Most IO logic is removed from localrepo and handled by obsstore object directly.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Wed, 04 Jul 2012 02:00:36 +0200
parents 28ed1c4511ce
children 95d785ccb4e5
line wrap: on
line diff
--- a/mercurial/localrepo.py	Wed Jul 11 18:35:14 2012 -0500
+++ b/mercurial/localrepo.py	Wed Jul 04 02:00:36 2012 +0200
@@ -193,10 +193,7 @@
 
     @storecache('obsstore')
     def obsstore(self):
-        store = obsolete.obsstore()
-        data = self.sopener.tryread('obsstore')
-        if data:
-            store.loadmarkers(data)
+        store = obsolete.obsstore(self.sopener)
         return store
 
     @storecache('00changelog.i')
@@ -990,16 +987,8 @@
             self.store.write()
             if '_phasecache' in vars(self):
                 self._phasecache.write()
-            if 'obsstore' in vars(self) and self.obsstore._new:
-                # XXX: transaction logic should be used here. But for
-                # now rewriting the whole file is good enough.
-                f = self.sopener('obsstore', 'wb', atomictemp=True)
-                try:
-                    self.obsstore.flushmarkers(f)
-                    f.close()
-                except: # re-raises
-                    f.discard()
-                    raise
+            if 'obsstore' in vars(self):
+                self.obsstore.flushmarkers()
             for k, ce in self._filecache.items():
                 if k == 'dirstate':
                     continue