##// END OF EJS Templates
Implement recover and undo commands...
mpm@selenic.com -
r162:5dcbe4d9 default
parent child Browse files
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 for l in open(self.journal).readlines():
68 f, o = l.split('\0')
69 self.opener(f, "a").truncate(int(o))
70 os.unlink(self.journal)
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