--- a/mercurial/util.py Wed Jul 12 13:17:49 2017 -0700
+++ b/mercurial/util.py Wed Jul 12 13:57:03 2017 -0700
@@ -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)
+@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.