comparison mercurial/transaction.py @ 95:589f507bb259

Beginnings of transaction undo support
author mpm@selenic.com
date Wed, 18 May 2005 16:31:51 -0800
parents 42177b56b949
children 8d55c2d72c7c
comparison
equal deleted inserted replaced
94:7daef883134f 95:589f507bb259
12 # of the GNU General Public License, incorporated herein by reference. 12 # of the GNU General Public License, incorporated herein by reference.
13 13
14 import os 14 import os
15 15
16 class transaction: 16 class transaction:
17 def __init__(self, opener, journal): 17 def __init__(self, opener, journal, after = None):
18 self.opener = opener 18 self.opener = opener
19 self.after = after
19 self.entries = [] 20 self.entries = []
20 self.map = {} 21 self.map = {}
21 self.journal = journal 22 self.journal = journal
22 23
23 # abort here if the journal already exists 24 # abort here if the journal already exists
24 if os.path.exists(self.journal): 25 if os.path.exists(self.journal):
25 print "journal already exists, recovering" 26 raise "journal already exists!"
26 self.recover()
27 27
28 self.file = open(self.journal, "w") 28 self.file = open(self.journal, "w")
29 29
30 def __del__(self): 30 def __del__(self):
31 if self.entries: self.abort() 31 if self.entries: self.abort()
41 self.file.flush() 41 self.file.flush()
42 42
43 def close(self): 43 def close(self):
44 self.file.close() 44 self.file.close()
45 self.entries = [] 45 self.entries = []
46 os.unlink(self.journal) 46 if self.after:
47 os.rename(self.journal, self.after)
48 else:
49 os.unlink(self.journal)
47 50
48 def abort(self): 51 def abort(self):
49 if not self.entries: return 52 if not self.entries: return
50 53
51 print "transaction abort!" 54 print "transaction abort!"