##// END OF EJS Templates
fix bookmarks rollback behavior...
Alexander Solovyov -
r14266:89e7d35e stable
parent child Browse files
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