[Differential] [Updated, 32 lines] D66: histedit: extract InterventionRequired transaction handling to utils

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Wed Jul 12 19:59:06 EDT 2017


martinvonz updated this revision to Diff 100.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D66?vs=94&id=100

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 @@
     # 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:
+    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
Cc: mercurial-devel, indygreg


More information about the Mercurial-devel mailing list