Mercurial > hg > mercurial-crew-with-dirclash
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!" |