diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -1110,20 +1110,19 @@ total = len(state.actions) pos = 0 tr = None + # Don't use singletransaction by default since it rolls the entire + # transaction back if an unexpected exception happens (like a + # pretxncommit hook throws, or the user aborts the commit msg editor). + if ui.configbool("histedit", "singletransaction", False): + # Don't use a 'with' for the transaction, since actions may close + # and reopen a transaction. For example, if the action executes an + # external process it may choose to commit the transaction first. + tr = repo.transaction('histedit') # Force an initial state file write, so the user can run --abort/continue # even if there's an exception before the first transaction serialize. state.write() try: - # Don't use singletransaction by default since it rolls the entire - # transaction back if an unexpected exception happens (like a - # pretxncommit hook throws, or the user aborts the commit msg editor). - if ui.configbool("histedit", "singletransaction", False): - # Don't use a 'with' for the transaction, since actions may close - # and reopen a transaction. For example, if the action executes an - # external process it may choose to commit the transaction first. - tr = repo.transaction('histedit') - while state.actions: state.write(tr=tr) actobj = state.actions[0]