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