Mercurial > public > mercurial-scm > hg-stable
comparison 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 |
comparison
equal
deleted
inserted
replaced
17123:8e030168b09e | 17124:f1b7683f3f95 |
---|---|
191 def _phasecache(self): | 191 def _phasecache(self): |
192 return phases.phasecache(self, self._phasedefaults) | 192 return phases.phasecache(self, self._phasedefaults) |
193 | 193 |
194 @storecache('obsstore') | 194 @storecache('obsstore') |
195 def obsstore(self): | 195 def obsstore(self): |
196 store = obsolete.obsstore() | 196 store = obsolete.obsstore(self.sopener) |
197 data = self.sopener.tryread('obsstore') | |
198 if data: | |
199 store.loadmarkers(data) | |
200 return store | 197 return store |
201 | 198 |
202 @storecache('00changelog.i') | 199 @storecache('00changelog.i') |
203 def changelog(self): | 200 def changelog(self): |
204 c = changelog.changelog(self.sopener) | 201 c = changelog.changelog(self.sopener) |
988 | 985 |
989 def unlock(): | 986 def unlock(): |
990 self.store.write() | 987 self.store.write() |
991 if '_phasecache' in vars(self): | 988 if '_phasecache' in vars(self): |
992 self._phasecache.write() | 989 self._phasecache.write() |
993 if 'obsstore' in vars(self) and self.obsstore._new: | 990 if 'obsstore' in vars(self): |
994 # XXX: transaction logic should be used here. But for | 991 self.obsstore.flushmarkers() |
995 # now rewriting the whole file is good enough. | |
996 f = self.sopener('obsstore', 'wb', atomictemp=True) | |
997 try: | |
998 self.obsstore.flushmarkers(f) | |
999 f.close() | |
1000 except: # re-raises | |
1001 f.discard() | |
1002 raise | |
1003 for k, ce in self._filecache.items(): | 992 for k, ce in self._filecache.items(): |
1004 if k == 'dirstate': | 993 if k == 'dirstate': |
1005 continue | 994 continue |
1006 ce.refresh() | 995 ce.refresh() |
1007 | 996 |