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