# HG changeset patch # User Durham Goode # Date 1494368614 25200 # Node ID e65d6f6897f4d4f089bcfd822ca158a4ad63cd96 # Parent 180e0d5fba2e31de7e735df99224c4104b01bc8a 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. diff --git a/hgsubversion/wrappers.py b/hgsubversion/wrappers.py --- 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'):