equal
deleted
inserted
replaced
210 `hg amend` (e.g. files modified as part of an amend will be |
210 `hg amend` (e.g. files modified as part of an amend will be |
211 marked as modified `hg status`) |
211 marked as modified `hg status`) |
212 """ |
212 """ |
213 |
213 |
214 unfi = repo.unfiltered() |
214 unfi = repo.unfiltered() |
215 |
|
216 # identify the commit from which to unamend |
|
217 curctx = repo['.'] |
|
218 |
|
219 with repo.wlock(), repo.lock(), repo.transaction('unamend'): |
215 with repo.wlock(), repo.lock(), repo.transaction('unamend'): |
|
216 |
|
217 # identify the commit from which to unamend |
|
218 curctx = repo['.'] |
|
219 |
220 if not curctx.mutable(): |
220 if not curctx.mutable(): |
221 raise error.Abort(_('cannot unamend public changesets')) |
221 raise error.Abort(_('cannot unamend public changesets')) |
222 |
222 |
223 # identify the commit to which to unamend |
223 # identify the commit to which to unamend |
224 markers = list(predecessormarkers(curctx)) |
224 markers = list(predecessormarkers(curctx)) |
233 raise error.Abort(_("cannot unamend a changeset with children")) |
233 raise error.Abort(_("cannot unamend a changeset with children")) |
234 |
234 |
235 # add an extra so that we get a new hash |
235 # add an extra so that we get a new hash |
236 # note: allowing unamend to undo an unamend is an intentional feature |
236 # note: allowing unamend to undo an unamend is an intentional feature |
237 extras = predctx.extra() |
237 extras = predctx.extra() |
238 extras['unamend_source'] = curctx.node() |
238 extras['unamend_source'] = curctx.hex() |
239 |
239 |
240 def filectxfn(repo, ctx_, path): |
240 def filectxfn(repo, ctx_, path): |
241 try: |
241 try: |
242 return predctx.filectx(path) |
242 return predctx.filectx(path) |
243 except KeyError: |
243 except KeyError: |
257 overrides = {('phases', 'new-commit'): commitphase} |
257 overrides = {('phases', 'new-commit'): commitphase} |
258 with repo.ui.configoverride(overrides, 'uncommit'): |
258 with repo.ui.configoverride(overrides, 'uncommit'): |
259 newprednode = repo.commitctx(newctx) |
259 newprednode = repo.commitctx(newctx) |
260 |
260 |
261 newpredctx = repo[newprednode] |
261 newpredctx = repo[newprednode] |
262 |
|
263 changedfiles = [] |
|
264 wctx = repo[None] |
|
265 wm = wctx.manifest() |
|
266 cm = newpredctx.manifest() |
|
267 dirstate = repo.dirstate |
262 dirstate = repo.dirstate |
268 diff = cm.diff(wm) |
|
269 changedfiles.extend(diff.iterkeys()) |
|
270 |
263 |
271 with dirstate.parentchange(): |
264 with dirstate.parentchange(): |
272 dirstate.setparents(newprednode, node.nullid) |
265 dirstate.setparents(newprednode, node.nullid) |
273 s = repo.status(predctx, curctx) |
266 s = repo.status(predctx, curctx) |
274 _fixdirstate(repo, curctx, newpredctx, s) |
267 _fixdirstate(repo, curctx, newpredctx, s) |