[PATCH] debugshell: disable demand importer when importing debugger
Gregory Szorc
gregory.szorc at gmail.com
Tue Jan 12 02:25:56 UTC 2016
# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1452564998 28800
# Mon Jan 11 18:16:38 2016 -0800
# Node ID 7e2276ca61d80c04e8838e502f42304be2e70aa9
# Parent 4571c0b383378f5eec5189e3a39c672a169ce566
debugshell: disable demand importer when importing debugger
For reasons I can't explain (but likely have something to do with a
combination of __import__ inferring default values for arguments and
the demand importer mechanism further assuming defaults), the demand
importer isn't playing well with IPython. Without this patch, we get
a failure "ValueError: Attempted relative import in non-package" when
attempting to import "IPython." The stack has numerous demandimport
calls on it and adding "IPython" to the exclude list in demandimport
isn't enough to make the problem go away, which means the issue is
likely somewhere in the bowells of IPython. It's easier to just disable
the demand importer when importing the debugger.
diff --git a/contrib/debugshell.py b/contrib/debugshell.py
--- a/contrib/debugshell.py
+++ b/contrib/debugshell.py
@@ -3,9 +3,12 @@
import sys
import mercurial
import code
-from mercurial import cmdutil
+from mercurial import (
+ cmdutil,
+ demandimport,
+)
cmdtable = {}
command = cmdutil.command(cmdtable)
@@ -44,9 +47,10 @@ def debugshell(ui, repo, **opts):
debugger = 'pdb'
# if IPython doesn't exist, fallback to code.interact
try:
- __import__(pdbmap[debugger])
+ with demandimport.deactivated():
+ __import__(pdbmap[debugger])
except ImportError:
ui.warn("%s debugger specified but %s module was not found\n"
% (debugger, pdbmap[debugger]))
debugger = 'pdb'
More information about the Mercurial-devel
mailing list