equal
deleted
inserted
replaced
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!" |