Comments
Patch
@@ -812,26 +812,35 @@
state.write()
return
elif goal == 'abort':
- state.read()
- tmpnodes, leafs = newnodestoabort(state)
- ui.debug('restore wc to old parent %s\n' % node.short(state.topmost))
+ try:
+ state.read()
+ tmpnodes, leafs = newnodestoabort(state)
+ ui.debug('restore wc to old parent %s\n'
+ % node.short(state.topmost))
- # Recover our old commits if necessary
- if not state.topmost in repo and state.backupfile:
- backupfile = repo.join(state.backupfile)
- f = hg.openpath(ui, backupfile)
- gen = exchange.readbundle(ui, f, backupfile)
- changegroup.addchangegroup(repo, gen, 'histedit',
- 'bundle:' + backupfile)
- os.remove(backupfile)
+ # Recover our old commits if necessary
+ if not state.topmost in repo and state.backupfile:
+ backupfile = repo.join(state.backupfile)
+ f = hg.openpath(ui, backupfile)
+ gen = exchange.readbundle(ui, f, backupfile)
+ changegroup.addchangegroup(repo, gen, 'histedit',
+ 'bundle:' + backupfile)
+ os.remove(backupfile)
- # check whether we should update away
- if repo.unfiltered().revs('parents() and (%n or %ln::)',
- state.parentctxnode, leafs | tmpnodes):
- hg.clean(repo, state.topmost)
- cleanupnode(ui, repo, 'created', tmpnodes)
- cleanupnode(ui, repo, 'temp', leafs)
- state.clear()
+ # check whether we should update away
+ if repo.unfiltered().revs('parents() and (%n or %ln::)',
+ state.parentctxnode, leafs | tmpnodes):
+ hg.clean(repo, state.topmost)
+ cleanupnode(ui, repo, 'created', tmpnodes)
+ cleanupnode(ui, repo, 'temp', leafs)
+ except Exception:
+ if state.inprogress():
+ ui.warn(_('warning: encountered an exception during histedit '
+ '--abort; the repository may not have been completely '
+ 'cleaned up\n'))
+ raise
+ finally:
+ state.clear()
return
else:
cmdutil.checkunfinished(repo)
@@ -324,3 +324,24 @@
|
o 0:6058cbb6cfd7 one
+
+Test that abort fails gracefully on exception
+----------------------------------------------
+ $ hg histedit . -q --commands - << EOF
+ > edit 8fda0c726bf2 6 x
+ > EOF
+ Make changes as needed, you may commit or record as needed now.
+ When you are finished, run hg histedit --continue to resume.
+ [1]
+Corrupt histedit state file
+ $ sed -i 's/8fda0c726bf2/123456789012/' .hg/histedit-state
+ $ hg histedit --abort
+ warning: encountered an exception during histedit --abort; the repository may not have been completely cleaned up
+ abort: No such file or directory: * (glob)
+ [255]
+Histedit state has been exited
+ $ hg summary -q
+ parent: 5:63379946892c
+ commit: 1 added, 1 unknown (new branch head)
+ update: 4 new changesets (update)
+