Show More
@@ -423,6 +423,14 b' elif cmd == "tags":' | |||
|
423 | 423 | r = "?" |
|
424 | 424 | print "%-30s %5d:%s" % (k, repo.changelog.rev(n), hg.hex(n)) |
|
425 | 425 | |
|
426 | elif cmd == "recover": | |
|
427 | ui.status("rolling back any existing journal") | |
|
428 | repo.recover() | |
|
429 | ||
|
430 | elif cmd == "undo": | |
|
431 | ui.status("rolling back previous transaction") | |
|
432 | repo.recover("undo") | |
|
433 | ||
|
426 | 434 | elif cmd == "verify": |
|
427 | 435 | filelinkrevs = {} |
|
428 | 436 | filenodes = {} |
@@ -297,6 +297,11 b' class localrepository:' | |||
|
297 | 297 | return transaction(self.opener, self.join("journal"), |
|
298 | 298 | self.join("undo")) |
|
299 | 299 | |
|
300 | def recover(self, f = "journal"): | |
|
301 | self.lock() | |
|
302 | if os.path.exists(self.join(f)): | |
|
303 | return rollback(self.opener, self.join(f)) | |
|
304 | ||
|
300 | 305 | def lock(self, wait = 1): |
|
301 | 306 | try: |
|
302 | 307 | return lock.lock(self.join("lock"), 0) |
@@ -15,16 +15,18 b' import os' | |||
|
15 | 15 | |
|
16 | 16 | class transaction: |
|
17 | 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 | 24 | self.opener = opener |
|
19 | 25 | self.after = after |
|
20 | 26 | self.entries = [] |
|
21 | 27 | self.map = {} |
|
22 | 28 | self.journal = journal |
|
23 | 29 | |
|
24 | # abort here if the journal already exists | |
|
25 | if os.path.exists(self.journal): | |
|
26 | raise "journal already exists!" | |
|
27 | ||
|
28 | 30 | self.file = open(self.journal, "w") |
|
29 | 31 | |
|
30 | 32 | def __del__(self): |
@@ -63,9 +65,9 b' class transaction:' | |||
|
63 | 65 | |
|
64 | 66 | print "rollback completed" |
|
65 | 67 | |
|
66 | def recover(self): | |
|
67 |
|
|
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
|
68 | def rollback(opener, file): | |
|
69 | for l in open(file).readlines(): | |
|
70 | f, o = l.split('\0') | |
|
71 | opener(f, "a").truncate(int(o)) | |
|
72 | os.unlink(file) | |
|
71 | 73 |
General Comments 0
You need to be logged in to leave comments.
Login now