157 # keepopen is not meant for use on the command line, but by |
157 # keepopen is not meant for use on the command line, but by |
158 # other extensions |
158 # other extensions |
159 self.keepopen = opts.get('keepopen', False) |
159 self.keepopen = opts.get('keepopen', False) |
160 self.obsoletenotrebased = {} |
160 self.obsoletenotrebased = {} |
161 |
161 |
|
162 def storestatus(self): |
|
163 """Store the current status to allow recovery""" |
|
164 repo = self.repo |
|
165 f = repo.vfs("rebasestate", "w") |
|
166 f.write(repo[self.originalwd].hex() + '\n') |
|
167 f.write(repo[self.target].hex() + '\n') |
|
168 f.write(repo[self.external].hex() + '\n') |
|
169 f.write('%d\n' % int(self.collapsef)) |
|
170 f.write('%d\n' % int(self.keepf)) |
|
171 f.write('%d\n' % int(self.keepbranchesf)) |
|
172 f.write('%s\n' % (self.activebookmark or '')) |
|
173 for d, v in self.state.iteritems(): |
|
174 oldrev = repo[d].hex() |
|
175 if v >= 0: |
|
176 newrev = repo[v].hex() |
|
177 elif v == revtodo: |
|
178 # To maintain format compatibility, we have to use nullid. |
|
179 # Please do remove this special case when upgrading the format. |
|
180 newrev = hex(nullid) |
|
181 else: |
|
182 newrev = v |
|
183 f.write("%s:%s\n" % (oldrev, newrev)) |
|
184 f.close() |
|
185 repo.ui.debug('rebase status stored\n') |
|
186 |
162 def restorestatus(self): |
187 def restorestatus(self): |
163 """Restore a previously stored status""" |
188 """Restore a previously stored status""" |
164 repo = self.repo |
189 repo = self.repo |
165 keepbranches = None |
190 keepbranches = None |
166 target = None |
191 target = None |
356 _('changesets'), total) |
381 _('changesets'), total) |
357 p1, p2, base = defineparents(repo, rev, self.target, |
382 p1, p2, base = defineparents(repo, rev, self.target, |
358 self.state, |
383 self.state, |
359 self.targetancestors, |
384 self.targetancestors, |
360 self.obsoletenotrebased) |
385 self.obsoletenotrebased) |
361 storestatus(repo, self.originalwd, self.target, |
386 self.storestatus() |
362 self.state, self.collapsef, self.keepf, |
|
363 self.keepbranchesf, self.external, |
|
364 self.activebookmark) |
|
365 storecollapsemsg(repo, self.collapsemsg) |
387 storecollapsemsg(repo, self.collapsemsg) |
366 if len(repo[None].parents()) == 2: |
388 if len(repo[None].parents()) == 2: |
367 repo.ui.debug('resuming interrupted rebase\n') |
389 repo.ui.debug('resuming interrupted rebase\n') |
368 else: |
390 else: |
369 try: |
391 try: |
1074 if err.errno != errno.ENOENT: |
1096 if err.errno != errno.ENOENT: |
1075 raise |
1097 raise |
1076 raise error.Abort(_('no rebase in progress')) |
1098 raise error.Abort(_('no rebase in progress')) |
1077 return collapsemsg |
1099 return collapsemsg |
1078 |
1100 |
1079 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches, |
|
1080 external, activebookmark): |
|
1081 'Store the current status to allow recovery' |
|
1082 f = repo.vfs("rebasestate", "w") |
|
1083 f.write(repo[originalwd].hex() + '\n') |
|
1084 f.write(repo[target].hex() + '\n') |
|
1085 f.write(repo[external].hex() + '\n') |
|
1086 f.write('%d\n' % int(collapse)) |
|
1087 f.write('%d\n' % int(keep)) |
|
1088 f.write('%d\n' % int(keepbranches)) |
|
1089 f.write('%s\n' % (activebookmark or '')) |
|
1090 for d, v in state.iteritems(): |
|
1091 oldrev = repo[d].hex() |
|
1092 if v >= 0: |
|
1093 newrev = repo[v].hex() |
|
1094 elif v == revtodo: |
|
1095 # To maintain format compatibility, we have to use nullid. |
|
1096 # Please do remove this special case when upgrading the format. |
|
1097 newrev = hex(nullid) |
|
1098 else: |
|
1099 newrev = v |
|
1100 f.write("%s:%s\n" % (oldrev, newrev)) |
|
1101 f.close() |
|
1102 repo.ui.debug('rebase status stored\n') |
|
1103 |
|
1104 def clearstatus(repo): |
1101 def clearstatus(repo): |
1105 'Remove the status files' |
1102 'Remove the status files' |
1106 _clearrebasesetvisibiliy(repo) |
1103 _clearrebasesetvisibiliy(repo) |
1107 util.unlinkpath(repo.join("rebasestate"), ignoremissing=True) |
1104 util.unlinkpath(repo.join("rebasestate"), ignoremissing=True) |
1108 |
1105 |