Show More
@@ -417,9 +417,6 b' elif cmd == "tags":' | |||
|
417 | 417 | elif cmd == "recover": |
|
418 | 418 | repo.recover() |
|
419 | 419 | |
|
420 | elif cmd == "undo": | |
|
421 | repo.recover("undo") | |
|
422 | ||
|
423 | 420 | elif cmd == "verify": |
|
424 | 421 | filelinkrevs = {} |
|
425 | 422 | filenodes = {} |
@@ -90,6 +90,9 b' def annotate(u, repo, args, **ops):' | |||
|
90 | 90 | for p,l in zip(zip(*pieces), lines): |
|
91 | 91 | u.write(" ".join(p) + ": " + l[1]) |
|
92 | 92 | |
|
93 | def undo(ui, repo, args): | |
|
94 | repo.undo() | |
|
95 | ||
|
93 | 96 | table = { |
|
94 | 97 | "init": (init, [], 'hg init'), |
|
95 | 98 | "help": (help, [], 'hg init'), |
@@ -100,6 +103,7 b' table = {' | |||
|
100 | 103 | ('n', 'number', None, 'show revision number'), |
|
101 | 104 | ('c', 'changeset', None, 'show changeset')], |
|
102 | 105 | 'hg annotate [-u] [-c] [-n] [-r id] [files]'), |
|
106 | "undo": (undo, [], 'hg undo'), | |
|
103 | 107 | } |
|
104 | 108 | |
|
105 | 109 | norepo = "init branch help" |
@@ -329,13 +329,35 b' class localrepository:' | |||
|
329 | 329 | return transaction(self.opener, self.join("journal"), |
|
330 | 330 | self.join("undo")) |
|
331 | 331 | |
|
332 |
def recover(self |
|
|
332 | def recover(self): | |
|
333 | self.lock() | |
|
334 | if os.path.exists(self.join("recover")): | |
|
335 | self.ui.status("attempting to rollback interrupted transaction\n") | |
|
336 | return rollback(self.opener, self.join("recover")) | |
|
337 | else: | |
|
338 | self.ui.warn("no interrupted transaction available\n") | |
|
339 | ||
|
340 | def undo(self): | |
|
333 | 341 | self.lock() |
|
334 |
if os.path.exists(self.join( |
|
|
335 |
self.ui.status("attempting to rollback |
|
|
336 |
|
|
|
342 | if os.path.exists(self.join("undo")): | |
|
343 | self.ui.status("attempting to rollback last transaction\n") | |
|
344 | rollback(self.opener, self.join("undo")) | |
|
345 | self.manifest = manifest(self.opener) | |
|
346 | self.changelog = changelog(self.opener) | |
|
347 | ||
|
348 | self.ui.status("discarding dircache\n") | |
|
349 | node = self.changelog.tip() | |
|
350 | mf = self.changelog.read(node)[0] | |
|
351 | mm = self.manifest.read(mf) | |
|
352 | f = mm.keys() | |
|
353 | f.sort() | |
|
354 | ||
|
355 | self.setcurrent(node) | |
|
356 | self.dircache.clear() | |
|
357 | self.dircache.taint(f) | |
|
358 | ||
|
337 | 359 | else: |
|
338 |
self.ui.warn("no |
|
|
360 | self.ui.warn("no undo information available\n") | |
|
339 | 361 | |
|
340 | 362 | def lock(self, wait = 1): |
|
341 | 363 | try: |
@@ -476,7 +498,7 b' class localrepository:' | |||
|
476 | 498 | if fn in dc: |
|
477 | 499 | c = dc[fn] |
|
478 | 500 | del dc[fn] |
|
479 | if not c: | |
|
501 | if not c or c[1] < 0: | |
|
480 | 502 | if fcmp(fn): |
|
481 | 503 | changed.append(fn) |
|
482 | 504 | elif c[1] != s.st_size: |
General Comments 0
You need to be logged in to leave comments.
Login now