Show More
@@ -154,6 +154,78 b' class rebaseruntime(object):' | |||
|
154 | 154 | # other extensions |
|
155 | 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 | 229 | @command('rebase', |
|
158 | 230 | [('s', 'source', '', |
|
159 | 231 | _('rebase the specified changeset and descendants'), _('REV')), |
@@ -309,10 +381,7 b' def rebase(ui, repo, **opts):' | |||
|
309 | 381 | ui.warn(_('tool option will be ignored\n')) |
|
310 | 382 | |
|
311 | 383 | try: |
|
312 | (rbsrt.originalwd, rbsrt.target, rbsrt.state, | |
|
313 | rbsrt.skipped, rbsrt.collapsef, rbsrt.keepf, | |
|
314 | rbsrt.keepbranchesf, rbsrt.external, | |
|
315 | rbsrt.activebookmark) = restorestatus(repo) | |
|
384 | rbsrt.restorestatus() | |
|
316 | 385 | rbsrt.collapsemsg = restorecollapsemsg(repo) |
|
317 | 386 | except error.RepoLookupError: |
|
318 | 387 | if abortf: |
@@ -1006,68 +1075,6 b' def clearstatus(repo):' | |||
|
1006 | 1075 | _clearrebasesetvisibiliy(repo) |
|
1007 | 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 | 1078 | def needupdate(repo, state): |
|
1072 | 1079 | '''check whether we should `update --clean` away from a merge, or if |
|
1073 | 1080 | somehow the working dir got forcibly updated, e.g. by older hg''' |
@@ -1390,7 +1397,9 b' def summaryhook(ui, repo):' | |||
|
1390 | 1397 | if not os.path.exists(repo.join('rebasestate')): |
|
1391 | 1398 | return |
|
1392 | 1399 | try: |
|
1393 | state = restorestatus(repo)[2] | |
|
1400 | rbsrt = rebaseruntime(repo, ui, {}) | |
|
1401 | rbsrt.restorestatus() | |
|
1402 | state = rbsrt.state | |
|
1394 | 1403 | except error.RepoLookupError: |
|
1395 | 1404 | # i18n: column positioning for "hg summary" |
|
1396 | 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