mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
transaction: only delete journal on successful abort/commit
This solves that the journal file was always deleted when the transaction was deleted, no matter whether the abort (rollback) succeeded or not. Thus, never supporting a hg recover. The journal file is now only deleted on close (commit) or a successful abort.
This commit is contained in:
parent
b783216f45
commit
c57f2e28ee
@ -34,8 +34,6 @@ class transaction(object):
|
||||
if self.journal:
|
||||
if self.entries: self.abort()
|
||||
self.file.close()
|
||||
try: os.unlink(self.journal)
|
||||
except: pass
|
||||
|
||||
def add(self, file, offset, data=None):
|
||||
if file in self.map: return
|
||||
@ -82,15 +80,23 @@ class transaction(object):
|
||||
|
||||
self.report(_("transaction abort!\n"))
|
||||
|
||||
failed = False
|
||||
for f, o, ignore in self.entries:
|
||||
try:
|
||||
self.opener(f, "a").truncate(o)
|
||||
except:
|
||||
failed = True
|
||||
self.report(_("failed to truncate %s\n") % f)
|
||||
|
||||
self.entries = []
|
||||
|
||||
self.report(_("rollback completed\n"))
|
||||
if not failed:
|
||||
self.file.close()
|
||||
os.unlink(self.journal)
|
||||
self.journal = None
|
||||
self.report(_("rollback completed\n"))
|
||||
else:
|
||||
self.report(_("rollback failed - please run hg recover\n"))
|
||||
|
||||
def rollback(opener, file):
|
||||
files = {}
|
||||
|
Loading…
Reference in New Issue
Block a user