Submitter | Jordi Gutiérrez Hermoso |
---|---|
Date | May 28, 2015, 8:44 p.m. |
Message ID | <92881f06e157c5123b3b.1432845873@Iris> |
Download | mbox | patch |
Permalink | /patch/9343/ |
State | Accepted |
Headers | show |
Comments
On Thu, May 28, 2015 at 04:44:33PM -0400, Jordi Gutiérrez Hermoso wrote: > # HG changeset patch > # User Jordi Gutiérrez Hermoso <jordigh@octave.org> > # Date 1432845741 14400 > # Thu May 28 16:42:21 2015 -0400 > # Node ID 92881f06e157c5123b3b5949d9145ba7809ae165 > # Parent 8ba3d6abebd87af2166b84936a45df850af86dad > dispatch: disable demandimport for the --debugger option Queued these, thanks! > > 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__)) > > diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py > --- a/mercurial/dispatch.py > +++ b/mercurial/dispatch.py > @@ -11,6 +11,7 @@ import difflib > import util, commands, hg, fancyopts, extensions, hook, error > import cmdutil, encoding > import ui as uimod > +import demandimport > > class request(object): > def __init__(self, args, ui=None, repo=None, fin=None, fout=None, > @@ -137,10 +138,11 @@ def _runcatch(req): > # This import can be slow for fancy debuggers, so only > # do it when absolutely necessary, i.e. when actual > # debugging has been requested > - try: > - debugmod = __import__(debugger) > - except ImportError: > - pass # Leave debugmod = pdb > + with demandimport.deactivated(): > + try: > + debugmod = __import__(debugger) > + except ImportError: > + pass # Leave debugmod = pdb > > debugtrace[debugger] = debugmod.set_trace > debugmortem[debugger] = debugmod.post_mortem > _______________________________________________ > Mercurial-devel mailing list > Mercurial-devel@selenic.com > https://selenic.com/mailman/listinfo/mercurial-devel
Patch
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -11,6 +11,7 @@ import difflib import util, commands, hg, fancyopts, extensions, hook, error import cmdutil, encoding import ui as uimod +import demandimport class request(object): def __init__(self, args, ui=None, repo=None, fin=None, fout=None, @@ -137,10 +138,11 @@ def _runcatch(req): # This import can be slow for fancy debuggers, so only # do it when absolutely necessary, i.e. when actual # debugging has been requested - try: - debugmod = __import__(debugger) - except ImportError: - pass # Leave debugmod = pdb + with demandimport.deactivated(): + try: + debugmod = __import__(debugger) + except ImportError: + pass # Leave debugmod = pdb debugtrace[debugger] = debugmod.set_trace debugmortem[debugger] = debugmod.post_mortem