# HG changeset patch # User Matt Mackall # Date 1392075086 21600 # Node ID d98ba4a87427ce601dd23de8d4f5288cc44fe945 # Parent f5b560c60bcdda25d0600cee1e9c3aa7ba139c5a# Parent aac87f70f38e1561c98057fc845f333b185b6d5d merge with stable diff -r f5b560c60bcd -r d98ba4a87427 mercurial/demandimport.py --- a/mercurial/demandimport.py Thu Feb 06 14:29:37 2014 -0800 +++ b/mercurial/demandimport.py Mon Feb 10 17:31:26 2014 -0600 @@ -162,6 +162,9 @@ 'mimetools', ] +def isenabled(): + return __builtin__.__import__ == _demandimport + def enable(): "enable global demand-loading of modules" __builtin__.__import__ = _demandimport diff -r f5b560c60bcd -r d98ba4a87427 mercurial/hook.py --- a/mercurial/hook.py Thu Feb 06 14:29:37 2014 -0800 +++ b/mercurial/hook.py Mon Feb 10 17:31:26 2014 -0600 @@ -36,28 +36,33 @@ if modpath and modfile: sys.path = sys.path[:] + [modpath] modname = modfile - try: + demandimportenabled = demandimport.isenabled() + if demandimportenabled: demandimport.disable() - obj = __import__(modname) - demandimport.enable() - except ImportError: - e1 = sys.exc_type, sys.exc_value, sys.exc_traceback + try: try: - # extensions are loaded with hgext_ prefix - obj = __import__("hgext_%s" % modname) - demandimport.enable() + obj = __import__(modname) except ImportError: + e1 = sys.exc_type, sys.exc_value, sys.exc_traceback + try: + # extensions are loaded with hgext_ prefix + obj = __import__("hgext_%s" % modname) + except ImportError: + e2 = sys.exc_type, sys.exc_value, sys.exc_traceback + if ui.tracebackflag: + ui.warn(_('exception from first failed import ' + 'attempt:\n')) + ui.traceback(e1) + if ui.tracebackflag: + ui.warn(_('exception from second failed import ' + 'attempt:\n')) + ui.traceback(e2) + raise util.Abort(_('%s hook is invalid ' + '(import of "%s" failed)') % + (hname, modname)) + finally: + if demandimportenabled: demandimport.enable() - e2 = sys.exc_type, sys.exc_value, sys.exc_traceback - if ui.tracebackflag: - ui.warn(_('exception from first failed import attempt:\n')) - ui.traceback(e1) - if ui.tracebackflag: - ui.warn(_('exception from second failed import attempt:\n')) - ui.traceback(e2) - raise util.Abort(_('%s hook is invalid ' - '(import of "%s" failed)') % - (hname, modname)) sys.path = oldpaths try: for p in funcname.split('.')[1:]: