##// END OF EJS Templates
rebase: move restorestestatus function to be a method of the RR class
Kostia Balytskyi -
r29403:b95fd7c1 default
parent child Browse files
Show More
@@ -154,6 +154,78 b' class rebaseruntime(object):'
154 # other extensions
154 # other extensions
155 self.keepopen = opts.get('keepopen', False)
155 self.keepopen = opts.get('keepopen', False)
156
156
157 def restorestatus(self):
158 """Restore a previously stored status"""
159 repo = self.repo
160 keepbranches = None
161 target = None
162 collapse = False
163 external = nullrev
164 activebookmark = None
165 state = {}
166
167 try:
168 f = repo.vfs("rebasestate")
169 for i, l in enumerate(f.read().splitlines()):
170 if i == 0:
171 originalwd = repo[l].rev()
172 elif i == 1:
173 target = repo[l].rev()
174 elif i == 2:
175 external = repo[l].rev()
176 elif i == 3:
177 collapse = bool(int(l))
178 elif i == 4:
179 keep = bool(int(l))
180 elif i == 5:
181 keepbranches = bool(int(l))
182 elif i == 6 and not (len(l) == 81 and ':' in l):
183 # line 6 is a recent addition, so for backwards
184 # compatibility check that the line doesn't look like the
185 # oldrev:newrev lines
186 activebookmark = l
187 else:
188 oldrev, newrev = l.split(':')
189 if newrev in (str(nullmerge), str(revignored),
190 str(revprecursor), str(revpruned)):
191 state[repo[oldrev].rev()] = int(newrev)
192 elif newrev == nullid:
193 state[repo[oldrev].rev()] = revtodo
194 # Legacy compat special case
195 else:
196 state[repo[oldrev].rev()] = repo[newrev].rev()
197
198 except IOError as err:
199 if err.errno != errno.ENOENT:
200 raise
201 cmdutil.wrongtooltocontinue(repo, _('rebase'))
202
203 if keepbranches is None:
204 raise error.Abort(_('.hg/rebasestate is incomplete'))
205
206 skipped = set()
207 # recompute the set of skipped revs
208 if not collapse:
209 seen = set([target])
210 for old, new in sorted(state.items()):
211 if new != revtodo and new in seen:
212 skipped.add(old)
213 seen.add(new)
214 repo.ui.debug('computed skipped revs: %s\n' %
215 (' '.join(str(r) for r in sorted(skipped)) or None))
216 repo.ui.debug('rebase status resumed\n')
217 _setrebasesetvisibility(repo, state.keys())
218
219 self.originalwd = originalwd
220 self.target = target
221 self.state = state
222 self.skipped = skipped
223 self.collapsef = collapse
224 self.keepf = keep
225 self.keepbranchesf = keepbranches
226 self.external = external
227 self.activebookmark = activebookmark
228
157 @command('rebase',
229 @command('rebase',
158 [('s', 'source', '',
230 [('s', 'source', '',
159 _('rebase the specified changeset and descendants'), _('REV')),
231 _('rebase the specified changeset and descendants'), _('REV')),
@@ -309,10 +381,7 b' def rebase(ui, repo, **opts):'
309 ui.warn(_('tool option will be ignored\n'))
381 ui.warn(_('tool option will be ignored\n'))
310
382
311 try:
383 try:
312 (rbsrt.originalwd, rbsrt.target, rbsrt.state,
384 rbsrt.restorestatus()
313 rbsrt.skipped, rbsrt.collapsef, rbsrt.keepf,
314 rbsrt.keepbranchesf, rbsrt.external,
315 rbsrt.activebookmark) = restorestatus(repo)
316 rbsrt.collapsemsg = restorecollapsemsg(repo)
385 rbsrt.collapsemsg = restorecollapsemsg(repo)
317 except error.RepoLookupError:
386 except error.RepoLookupError:
318 if abortf:
387 if abortf:
@@ -1006,68 +1075,6 b' def clearstatus(repo):'
1006 _clearrebasesetvisibiliy(repo)
1075 _clearrebasesetvisibiliy(repo)
1007 util.unlinkpath(repo.join("rebasestate"), ignoremissing=True)
1076 util.unlinkpath(repo.join("rebasestate"), ignoremissing=True)
1008
1077
1009 def restorestatus(repo):
1010 'Restore a previously stored status'
1011 keepbranches = None
1012 target = None
1013 collapse = False
1014 external = nullrev
1015 activebookmark = None
1016 state = {}
1017
1018 try:
1019 f = repo.vfs("rebasestate")
1020 for i, l in enumerate(f.read().splitlines()):
1021 if i == 0:
1022 originalwd = repo[l].rev()
1023 elif i == 1:
1024 target = repo[l].rev()
1025 elif i == 2:
1026 external = repo[l].rev()
1027 elif i == 3:
1028 collapse = bool(int(l))
1029 elif i == 4:
1030 keep = bool(int(l))
1031 elif i == 5:
1032 keepbranches = bool(int(l))
1033 elif i == 6 and not (len(l) == 81 and ':' in l):
1034 # line 6 is a recent addition, so for backwards compatibility
1035 # check that the line doesn't look like the oldrev:newrev lines
1036 activebookmark = l
1037 else:
1038 oldrev, newrev = l.split(':')
1039 if newrev in (str(nullmerge), str(revignored),
1040 str(revprecursor), str(revpruned)):
1041 state[repo[oldrev].rev()] = int(newrev)
1042 elif newrev == nullid:
1043 state[repo[oldrev].rev()] = revtodo
1044 # Legacy compat special case
1045 else:
1046 state[repo[oldrev].rev()] = repo[newrev].rev()
1047
1048 except IOError as err:
1049 if err.errno != errno.ENOENT:
1050 raise
1051 cmdutil.wrongtooltocontinue(repo, _('rebase'))
1052
1053 if keepbranches is None:
1054 raise error.Abort(_('.hg/rebasestate is incomplete'))
1055
1056 skipped = set()
1057 # recompute the set of skipped revs
1058 if not collapse:
1059 seen = set([target])
1060 for old, new in sorted(state.items()):
1061 if new != revtodo and new in seen:
1062 skipped.add(old)
1063 seen.add(new)
1064 repo.ui.debug('computed skipped revs: %s\n' %
1065 (' '.join(str(r) for r in sorted(skipped)) or None))
1066 repo.ui.debug('rebase status resumed\n')
1067 _setrebasesetvisibility(repo, state.keys())
1068 return (originalwd, target, state, skipped,
1069 collapse, keep, keepbranches, external, activebookmark)
1070
1071 def needupdate(repo, state):
1078 def needupdate(repo, state):
1072 '''check whether we should `update --clean` away from a merge, or if
1079 '''check whether we should `update --clean` away from a merge, or if
1073 somehow the working dir got forcibly updated, e.g. by older hg'''
1080 somehow the working dir got forcibly updated, e.g. by older hg'''
@@ -1390,7 +1397,9 b' def summaryhook(ui, repo):'
1390 if not os.path.exists(repo.join('rebasestate')):
1397 if not os.path.exists(repo.join('rebasestate')):
1391 return
1398 return
1392 try:
1399 try:
1393 state = restorestatus(repo)[2]
1400 rbsrt = rebaseruntime(repo, ui, {})
1401 rbsrt.restorestatus()
1402 state = rbsrt.state
1394 except error.RepoLookupError:
1403 except error.RepoLookupError:
1395 # i18n: column positioning for "hg summary"
1404 # i18n: column positioning for "hg summary"
1396 msg = _('rebase: (use "hg rebase --abort" to clear broken state)\n')
1405 msg = _('rebase: (use "hg rebase --abort" to clear broken state)\n')
General Comments 0
You need to be logged in to leave comments. Login now