[Differential] [Closed] D66: histedit: extract InterventionRequired transaction handling to utils
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Fri Jul 14 13:26:22 EDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGfad6852cf879: histedit: extract InterventionRequired transaction handling to utils (authored by martinvonz).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D66?vs=116&id=144
REVISION DETAIL
https://phab.mercurial-scm.org/D66
AFFECTED FILES
hgext/histedit.py
mercurial/util.py
CHANGE DETAILS
Index: mercurial/util.py
===================================================================
--- mercurial/util.py
+++ mercurial/util.py
@@ -19,6 +19,7 @@
import calendar
import codecs
import collections
+import contextlib
import datetime
import errno
import gc
@@ -589,6 +590,24 @@
del self[key]
super(sortdict, self).__setitem__(key, value)
+ at contextlib.contextmanager
+def acceptintervention(tr=None):
+ """A context manager that closes the transaction on InterventionRequired
+
+ If no transaction was provided, this simply runs the body and returns
+ """
+ if not tr:
+ yield
+ return
+ try:
+ yield
+ tr.close()
+ except error.InterventionRequired:
+ tr.close()
+ raise
+ finally:
+ tr.release()
+
class _lrucachenode(object):
"""A node in a doubly linked list.
Index: hgext/histedit.py
===================================================================
--- hgext/histedit.py
+++ hgext/histedit.py
@@ -1122,7 +1122,7 @@
# 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')
- try:
+ with util.acceptintervention(tr):
while state.actions:
state.write(tr=tr)
actobj = state.actions[0]
@@ -1136,17 +1136,6 @@
state.replacements.extend(replacement_)
state.actions.pop(0)
- if tr is not None:
- tr.close()
- except error.InterventionRequired:
- if tr is not None:
- tr.close()
- raise
- except Exception:
- if tr is not None:
- tr.abort()
- raise
-
state.write()
ui.progress(_("editing"), None)
EMAIL PREFERENCES
https://phab.mercurial-scm.org/settings/panel/emailpreferences/
To: martinvonz, #hg-reviewers, durham
Cc: lothiraldan, mercurial-devel
More information about the Mercurial-devel
mailing list