comparison mercurial/dispatch.py @ 25329:101e84121c13

dispatch: disable demandimport for the --debugger option Something in Python 2.7.9 or so broke the --debugger option with ui.debugger = ipdb. I get the traceback below. There is some apparent confusion with demandimport. This should be disabled anyway for the --debugger option. The debugger must be imported right away, before any other dispatch. There's no benefit in delaying the debugger import. This patch uses the demandimport.deactivated() context manager. Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/mercurial/dispatch.py", line 121, in _runcatch debugmod = __import__(debugger) File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 115, in _demandimport return _hgextimport(_import, name, globals, locals, fromlist, level) File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 47, in _hgextimport return importfunc(name, globals, *args) File "/usr/lib/python2.7/dist-packages/ipdb/__init__.py", line 16, in <module> from ipdb.__main__ import set_trace, post_mortem, pm, run, runcall, runeval, launch_ipdb_on_exception File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 134, in _demandimport mod = _hgextimport(_origimport, name, globals, locals) File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 47, in _hgextimport return importfunc(name, globals, *args) File "/usr/lib/python2.7/dist-packages/ipdb/__main__.py", line 29, in <module> if IPython.__version__ > '0.10.2': File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 106, in __getattribute__ self._load() File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 78, in _load mod = _hgextimport(_import, head, globals, locals, None, level) File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 47, in _hgextimport return importfunc(name, globals, *args) File "/usr/lib/python2.7/dist-packages/IPython/__init__.py", line 45, in <module> from .config.loader import Config File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 132, in _demandimport return _origimport(name, globals, locals, fromlist, level) File "/usr/lib/python2.7/dist-packages/IPython/config/__init__.py", line 16, in <module> from .application import * File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 115, in _demandimport return _hgextimport(_import, name, globals, locals, fromlist, level) File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 47, in _hgextimport return importfunc(name, globals, *args) File "/usr/lib/python2.7/dist-packages/IPython/config/application.py", line 30, in <module> from IPython.external.decorator import decorator File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 134, in _demandimport mod = _hgextimport(_origimport, name, globals, locals) File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 47, in _hgextimport return importfunc(name, globals, *args) File "/usr/lib/python2.7/dist-packages/IPython/external/decorator/__init__.py", line 2, in <module> from decorator import * File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 115, in _demandimport return _hgextimport(_import, name, globals, locals, fromlist, level) File "/usr/lib/python2.7/dist-packages/mercurial/demandimport.py", line 47, in _hgextimport return importfunc(name, globals, *args) File "/usr/lib/python2.7/dist-packages/decorator.py", line 240, in <module> 'ContextManager', (_GeneratorContextManager,), dict(__call__=__call__))
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Thu, 28 May 2015 16:42:21 -0400
parents 0f2dcbccf9c9
children 328739ea70c3
comparison
equal deleted inserted replaced
25328:2cfb0bbf83a1 25329:101e84121c13
9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re 9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re
10 import difflib 10 import difflib
11 import util, commands, hg, fancyopts, extensions, hook, error 11 import util, commands, hg, fancyopts, extensions, hook, error
12 import cmdutil, encoding 12 import cmdutil, encoding
13 import ui as uimod 13 import ui as uimod
14 import demandimport
14 15
15 class request(object): 16 class request(object):
16 def __init__(self, args, ui=None, repo=None, fin=None, fout=None, 17 def __init__(self, args, ui=None, repo=None, fin=None, fout=None,
17 ferr=None): 18 ferr=None):
18 self.args = args 19 self.args = args
135 debugger = 'pdb' 136 debugger = 'pdb'
136 elif '--debugger' in req.args: 137 elif '--debugger' in req.args:
137 # This import can be slow for fancy debuggers, so only 138 # This import can be slow for fancy debuggers, so only
138 # do it when absolutely necessary, i.e. when actual 139 # do it when absolutely necessary, i.e. when actual
139 # debugging has been requested 140 # debugging has been requested
140 try: 141 with demandimport.deactivated():
141 debugmod = __import__(debugger) 142 try:
142 except ImportError: 143 debugmod = __import__(debugger)
143 pass # Leave debugmod = pdb 144 except ImportError:
145 pass # Leave debugmod = pdb
144 146
145 debugtrace[debugger] = debugmod.set_trace 147 debugtrace[debugger] = debugmod.set_trace
146 debugmortem[debugger] = debugmod.post_mortem 148 debugmortem[debugger] = debugmod.post_mortem
147 149
148 # enter the debugger before command execution 150 # enter the debugger before command execution