--- a/mercurial/localrepo.py Thu Jun 28 08:45:38 2012 -0500
+++ b/mercurial/localrepo.py Thu Jun 07 19:07:39 2012 +0200
@@ -7,7 +7,7 @@
from node import bin, hex, nullid, nullrev, short
from i18n import _
-import repo, changegroup, subrepo, discovery, pushkey
+import repo, changegroup, subrepo, discovery, pushkey, obsolete
import changelog, dirstate, filelog, manifest, context, bookmarks, phases
import lock, transaction, store, encoding
import scmutil, util, extensions, hook, error, revset
@@ -192,6 +192,14 @@
def _phasecache(self):
return phases.phasecache(self, self._phasedefaults)
+ @storecache('obsstore')
+ def obsstore(self):
+ store = obsolete.obsstore()
+ data = self.sopener.tryread('obsstore')
+ if data:
+ store.loadmarkers(data)
+ return store
+
@storecache('00changelog.i')
def changelog(self):
c = changelog.changelog(self.sopener)
@@ -983,6 +991,16 @@
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
for k, ce in self._filecache.items():
if k == 'dirstate':
continue