Show More
@@ -61,12 +61,6 b' def write(repo):' | |||||
61 | ''' |
|
61 | ''' | |
62 | refs = repo._bookmarks |
|
62 | refs = repo._bookmarks | |
63 |
|
63 | |||
64 | try: |
|
|||
65 | bms = repo.opener('bookmarks').read() |
|
|||
66 | except IOError: |
|
|||
67 | bms = '' |
|
|||
68 | repo.opener('undo.bookmarks', 'w').write(bms) |
|
|||
69 |
|
||||
70 | if repo._bookmarkcurrent not in refs: |
|
64 | if repo._bookmarkcurrent not in refs: | |
71 | setcurrent(repo, None) |
|
65 | setcurrent(repo, None) | |
72 | for mark in refs.keys(): |
|
66 | for mark in refs.keys(): |
@@ -669,6 +669,17 b' class localrepository(repo.repository):' | |||||
669 | raise error.RepoError( |
|
669 | raise error.RepoError( | |
670 | _("abandoned transaction found - run hg recover")) |
|
670 | _("abandoned transaction found - run hg recover")) | |
671 |
|
671 | |||
|
672 | journalfiles = self._writejournal(desc) | |||
|
673 | renames = [(x, undoname(x)) for x in journalfiles] | |||
|
674 | ||||
|
675 | tr = transaction.transaction(self.ui.warn, self.sopener, | |||
|
676 | self.sjoin("journal"), | |||
|
677 | aftertrans(renames), | |||
|
678 | self.store.createmode) | |||
|
679 | self._transref = weakref.ref(tr) | |||
|
680 | return tr | |||
|
681 | ||||
|
682 | def _writejournal(self, desc): | |||
672 | # save dirstate for rollback |
|
683 | # save dirstate for rollback | |
673 | try: |
|
684 | try: | |
674 | ds = self.opener("dirstate").read() |
|
685 | ds = self.opener("dirstate").read() | |
@@ -679,16 +690,15 b' class localrepository(repo.repository):' | |||||
679 | encoding.fromlocal(self.dirstate.branch())) |
|
690 | encoding.fromlocal(self.dirstate.branch())) | |
680 | self.opener("journal.desc", "w").write("%d\n%s\n" % (len(self), desc)) |
|
691 | self.opener("journal.desc", "w").write("%d\n%s\n" % (len(self), desc)) | |
681 |
|
692 | |||
682 | renames = [(self.sjoin("journal"), self.sjoin("undo")), |
|
693 | bkname = self.join('bookmarks') | |
683 | (self.join("journal.dirstate"), self.join("undo.dirstate")), |
|
694 | if os.path.exists(bkname): | |
684 | (self.join("journal.branch"), self.join("undo.branch")), |
|
695 | util.copyfile(bkname, self.join('journal.bookmarks')) | |
685 | (self.join("journal.desc"), self.join("undo.desc"))] |
|
696 | else: | |
686 | tr = transaction.transaction(self.ui.warn, self.sopener, |
|
697 | self.opener('journal.bookmarks', 'w').write('') | |
687 | self.sjoin("journal"), |
|
698 | ||
688 | aftertrans(renames), |
|
699 | return (self.sjoin('journal'), self.join('journal.dirstate'), | |
689 | self.store.createmode) |
|
700 | self.join('journal.branch'), self.join('journal.desc'), | |
690 | self._transref = weakref.ref(tr) |
|
701 | self.join('journal.bookmarks')) | |
691 | return tr |
|
|||
692 |
|
702 | |||
693 | def recover(self): |
|
703 | def recover(self): | |
694 | lock = self.lock() |
|
704 | lock = self.lock() | |
@@ -2027,6 +2037,11 b' def aftertrans(files):' | |||||
2027 | util.rename(src, dest) |
|
2037 | util.rename(src, dest) | |
2028 | return a |
|
2038 | return a | |
2029 |
|
2039 | |||
|
2040 | def undoname(fn): | |||
|
2041 | base, name = os.path.split(fn) | |||
|
2042 | assert name.startswith('journal') | |||
|
2043 | return os.path.join(base, name.replace('journal', 'undo', 1)) | |||
|
2044 | ||||
2030 | def instance(ui, path, create): |
|
2045 | def instance(ui, path, create): | |
2031 | return localrepository(ui, util.drop_scheme('file', path), create) |
|
2046 | return localrepository(ui, util.drop_scheme('file', path), create) | |
2032 |
|
2047 |
@@ -231,6 +231,7 b' the bookmark extension should be ignored' | |||||
231 | Y 2:db815d6d32e6 |
|
231 | Y 2:db815d6d32e6 | |
232 | * Z 2:db815d6d32e6 |
|
232 | * Z 2:db815d6d32e6 | |
233 | x y 2:db815d6d32e6 |
|
233 | x y 2:db815d6d32e6 | |
|
234 | ||||
234 | test summary |
|
235 | test summary | |
235 |
|
236 | |||
236 | $ hg summary |
|
237 | $ hg summary | |
@@ -244,3 +245,16 b' test id' | |||||
244 |
|
245 | |||
245 | $ hg id |
|
246 | $ hg id | |
246 | db815d6d32e6 tip Y/Z/x y |
|
247 | db815d6d32e6 tip Y/Z/x y | |
|
248 | ||||
|
249 | test rollback | |||
|
250 | ||||
|
251 | $ hg bookmark -f Y -r 1 | |||
|
252 | $ hg bookmark -f Z -r 1 | |||
|
253 | $ hg rollback | |||
|
254 | repository tip rolled back to revision 1 (undo commit) | |||
|
255 | working directory now based on revision 0 | |||
|
256 | $ hg bookmarks | |||
|
257 | X 0:f7b1eb17ad24 | |||
|
258 | X2 1:925d80f479bb | |||
|
259 | Y -1:000000000000 | |||
|
260 | * Z 0:f7b1eb17ad24 |
@@ -76,6 +76,7 b' Non store repo:' | |||||
76 | .hg/last-message.txt |
|
76 | .hg/last-message.txt | |
77 | .hg/requires |
|
77 | .hg/requires | |
78 | .hg/undo |
|
78 | .hg/undo | |
|
79 | .hg/undo.bookmarks | |||
79 | .hg/undo.branch |
|
80 | .hg/undo.branch | |
80 | .hg/undo.desc |
|
81 | .hg/undo.desc | |
81 | .hg/undo.dirstate |
|
82 | .hg/undo.dirstate | |
@@ -102,6 +103,7 b' Non fncache repo:' | |||||
102 | .hg/store/data/tst.d.hg |
|
103 | .hg/store/data/tst.d.hg | |
103 | .hg/store/data/tst.d.hg/_foo.i |
|
104 | .hg/store/data/tst.d.hg/_foo.i | |
104 | .hg/store/undo |
|
105 | .hg/store/undo | |
|
106 | .hg/undo.bookmarks | |||
105 | .hg/undo.branch |
|
107 | .hg/undo.branch | |
106 | .hg/undo.desc |
|
108 | .hg/undo.desc | |
107 | .hg/undo.dirstate |
|
109 | .hg/undo.dirstate |
@@ -195,6 +195,7 b' r4 has hardlinks in the working dir (not' | |||||
195 | 2 r4/.hg/store/data/f1.i |
|
195 | 2 r4/.hg/store/data/f1.i | |
196 | 2 r4/.hg/store/fncache |
|
196 | 2 r4/.hg/store/fncache | |
197 | 2 r4/.hg/store/undo |
|
197 | 2 r4/.hg/store/undo | |
|
198 | 2 r4/.hg/undo.bookmarks | |||
198 | 2 r4/.hg/undo.branch |
|
199 | 2 r4/.hg/undo.branch | |
199 | 2 r4/.hg/undo.desc |
|
200 | 2 r4/.hg/undo.desc | |
200 | 2 r4/.hg/undo.dirstate |
|
201 | 2 r4/.hg/undo.dirstate | |
@@ -223,6 +224,7 b' Update back to revision 11 in r4 should ' | |||||
223 | 2 r4/.hg/store/data/f1.i |
|
224 | 2 r4/.hg/store/data/f1.i | |
224 | 2 r4/.hg/store/fncache |
|
225 | 2 r4/.hg/store/fncache | |
225 | 2 r4/.hg/store/undo |
|
226 | 2 r4/.hg/store/undo | |
|
227 | 2 r4/.hg/undo.bookmarks | |||
226 | 2 r4/.hg/undo.branch |
|
228 | 2 r4/.hg/undo.branch | |
227 | 2 r4/.hg/undo.desc |
|
229 | 2 r4/.hg/undo.desc | |
228 | 2 r4/.hg/undo.dirstate |
|
230 | 2 r4/.hg/undo.dirstate |
@@ -17,4 +17,4 b' Test hangup signal in the middle of tran' | |||||
17 | rollback completed |
|
17 | rollback completed | |
18 | killed! |
|
18 | killed! | |
19 | $ echo .hg/* .hg/store/* |
|
19 | $ echo .hg/* .hg/store/* | |
20 | .hg/00changelog.i .hg/journal.branch .hg/journal.desc .hg/journal.dirstate .hg/requires .hg/store .hg/store/00changelog.i .hg/store/00changelog.i.a |
|
20 | .hg/00changelog.i .hg/journal.bookmarks .hg/journal.branch .hg/journal.desc .hg/journal.dirstate .hg/requires .hg/store .hg/store/00changelog.i .hg/store/00changelog.i.a |
@@ -77,6 +77,7 b' new directories are setgid' | |||||
77 | 00660 ./.hg/store/data/foo.i |
|
77 | 00660 ./.hg/store/data/foo.i | |
78 | 00660 ./.hg/store/fncache |
|
78 | 00660 ./.hg/store/fncache | |
79 | 00660 ./.hg/store/undo |
|
79 | 00660 ./.hg/store/undo | |
|
80 | 00660 ./.hg/undo.bookmarks | |||
80 | 00660 ./.hg/undo.branch |
|
81 | 00660 ./.hg/undo.branch | |
81 | 00660 ./.hg/undo.desc |
|
82 | 00660 ./.hg/undo.desc | |
82 | 00660 ./.hg/undo.dirstate |
|
83 | 00660 ./.hg/undo.dirstate | |
@@ -117,6 +118,7 b' group can still write everything' | |||||
117 | 00660 ../push/.hg/store/data/foo.i |
|
118 | 00660 ../push/.hg/store/data/foo.i | |
118 | 00660 ../push/.hg/store/fncache |
|
119 | 00660 ../push/.hg/store/fncache | |
119 | 00660 ../push/.hg/store/undo |
|
120 | 00660 ../push/.hg/store/undo | |
|
121 | 00660 ../push/.hg/undo.bookmarks | |||
120 | 00660 ../push/.hg/undo.branch |
|
122 | 00660 ../push/.hg/undo.branch | |
121 | 00660 ../push/.hg/undo.desc |
|
123 | 00660 ../push/.hg/undo.desc | |
122 | 00660 ../push/.hg/undo.dirstate |
|
124 | 00660 ../push/.hg/undo.dirstate |
General Comments 0
You need to be logged in to leave comments.
Login now