changeset 1504:e65d6f6897f4

clone: add try/finally to unwrap While fixing other test failures, I saw stack overflows related to the clone function being wrapped too many times. I believe it's because this wrapping logic doesn't put the unwrap logic in a finally statement. This particularly bad in the tests, which do many things in one process. Hence the stack overflow.
author Durham Goode <durham@fb.com>
date Tue, 09 May 2017 15:23:34 -0700
parents 180e0d5fba2e
children 6f2c7b5940f6
files hgsubversion/wrappers.py
diffstat 1 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hgsubversion/wrappers.py
+++ b/hgsubversion/wrappers.py
@@ -660,9 +660,13 @@ def clone(orig, ui, source, dest=None, *
 
     # calling hg.clone directoly to get the repository instances it returns,
     # breaks in subtle ways, so we double-wrap
-    orighgclone = extensions.wrapfunction(hg, 'clone', hgclonewrapper)
-    orig(ui, source, dest, **opts)
-    hg.clone = orighgclone
+    orighgclone = None
+    try:
+        orighgclone = extensions.wrapfunction(hg, 'clone', hgclonewrapper)
+        orig(ui, source, dest, **opts)
+    finally:
+        if orighgclone:
+            hg.clone = orighgclone
 
     # do this again; the ui instance isn't shared between the wrappers
     if data.get('branches'):