comparison mercurial/localrepo.py @ 1784:2e0a288ca93e

revalidate revlog data after locking the repo (issue132)
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Wed, 22 Feb 2006 07:26:29 +0100
parents b9671b41e360
children d5248726d22f
comparison
equal deleted inserted replaced
1783:35a05f177267 1784:2e0a288ca93e
233 def recover(self): 233 def recover(self):
234 l = self.lock() 234 l = self.lock()
235 if os.path.exists(self.join("journal")): 235 if os.path.exists(self.join("journal")):
236 self.ui.status(_("rolling back interrupted transaction\n")) 236 self.ui.status(_("rolling back interrupted transaction\n"))
237 transaction.rollback(self.opener, self.join("journal")) 237 transaction.rollback(self.opener, self.join("journal"))
238 self.manifest = manifest.manifest(self.opener) 238 self.reload()
239 self.changelog = changelog.changelog(self.opener)
240 return True 239 return True
241 else: 240 else:
242 self.ui.warn(_("no interrupted transaction available\n")) 241 self.ui.warn(_("no interrupted transaction available\n"))
243 return False 242 return False
244 243
248 l = self.lock() 247 l = self.lock()
249 if os.path.exists(self.join("undo")): 248 if os.path.exists(self.join("undo")):
250 self.ui.status(_("rolling back last transaction\n")) 249 self.ui.status(_("rolling back last transaction\n"))
251 transaction.rollback(self.opener, self.join("undo")) 250 transaction.rollback(self.opener, self.join("undo"))
252 util.rename(self.join("undo.dirstate"), self.join("dirstate")) 251 util.rename(self.join("undo.dirstate"), self.join("dirstate"))
253 self.dirstate.read() 252 self.reload()
253 self.wreload()
254 else: 254 else:
255 self.ui.warn(_("no undo information available\n")) 255 self.ui.warn(_("no undo information available\n"))
256
257 def wreload(self):
258 self.dirstate.read()
259
260 def reload(self):
261 self.changelog.load()
262 self.manifest.load()
263 self.tagscache = None
264 self.nodetagscache = None
256 265
257 def do_lock(self, lockname, wait, releasefn=None, acquirefn=None): 266 def do_lock(self, lockname, wait, releasefn=None, acquirefn=None):
258 try: 267 try:
259 l = lock.lock(self.join(lockname), 0, releasefn) 268 l = lock.lock(self.join(lockname), 0, releasefn)
260 except lock.LockHeld, inst: 269 except lock.LockHeld, inst:
265 if acquirefn: 274 if acquirefn:
266 acquirefn() 275 acquirefn()
267 return l 276 return l
268 277
269 def lock(self, wait=1): 278 def lock(self, wait=1):
270 return self.do_lock("lock", wait) 279 return self.do_lock("lock", wait, acquirefn=self.reload)
271 280
272 def wlock(self, wait=1): 281 def wlock(self, wait=1):
273 return self.do_lock("wlock", wait, 282 return self.do_lock("wlock", wait,
274 self.dirstate.write, 283 self.dirstate.write,
275 self.dirstate.read) 284 self.wreload)
276 285
277 def checkfilemerge(self, filename, text, filelog, manifest1, manifest2): 286 def checkfilemerge(self, filename, text, filelog, manifest1, manifest2):
278 "determine whether a new filenode is needed" 287 "determine whether a new filenode is needed"
279 fp1 = manifest1.get(filename, nullid) 288 fp1 = manifest1.get(filename, nullid)
280 fp2 = manifest2.get(filename, nullid) 289 fp2 = manifest2.get(filename, nullid)