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) |