[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