Mercurial > public > mercurial-scm > hg-stable
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) |