Mercurial > hgsubversion
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'):