Mercurial > hg
comparison mercurial/transaction.py @ 162:5dcbe4d9a30c
Implement recover and undo commands
This adds an interface to transaction to rollback with a given journal file
and commands to rollback an existing .hg/journal or .hg/undo.
author | mpm@selenic.com |
---|---|
date | Thu, 26 May 2005 09:04:54 -0800 |
parents | 8d55c2d72c7c |
children | 43b8da7420a9 688d03d6997a |
comparison
equal
deleted
inserted
replaced
161:0b4c5cb953d9 | 162:5dcbe4d9a30c |
---|---|
13 | 13 |
14 import os | 14 import os |
15 | 15 |
16 class transaction: | 16 class transaction: |
17 def __init__(self, opener, journal, after = None): | 17 def __init__(self, opener, journal, after = None): |
18 self.journal = None | |
19 | |
20 # abort here if the journal already exists | |
21 if os.path.exists(journal): | |
22 raise "journal already exists - run hg recover" | |
23 | |
18 self.opener = opener | 24 self.opener = opener |
19 self.after = after | 25 self.after = after |
20 self.entries = [] | 26 self.entries = [] |
21 self.map = {} | 27 self.map = {} |
22 self.journal = journal | 28 self.journal = journal |
23 | |
24 # abort here if the journal already exists | |
25 if os.path.exists(self.journal): | |
26 raise "journal already exists!" | |
27 | 29 |
28 self.file = open(self.journal, "w") | 30 self.file = open(self.journal, "w") |
29 | 31 |
30 def __del__(self): | 32 def __del__(self): |
31 if self.entries: self.abort() | 33 if self.entries: self.abort() |
61 | 63 |
62 self.entries = [] | 64 self.entries = [] |
63 | 65 |
64 print "rollback completed" | 66 print "rollback completed" |
65 | 67 |
66 def recover(self): | 68 def rollback(opener, file): |
67 for l in open(self.journal).readlines(): | 69 for l in open(file).readlines(): |
68 f, o = l.split('\0') | 70 f, o = l.split('\0') |
69 self.opener(f, "a").truncate(int(o)) | 71 opener(f, "a").truncate(int(o)) |
70 os.unlink(self.journal) | 72 os.unlink(file) |
71 | 73 |