diff --git a/mercurial/lsprof.py b/mercurial/lsprof.py --- a/mercurial/lsprof.py +++ b/mercurial/lsprof.py @@ -4,7 +4,13 @@ # small modifications made import sys -from _lsprof import Profiler, profiler_entry, profiler_subentry +try: + from _lsprof import Profiler, profiler_entry, profiler_subentry +except ImportError, inst: + import packagescan + if packagescan.scan_in_progress: + raise packagescan.SkipPackage('_lsprof not available') + raise __all__ = ['profile', 'Stats'] diff --git a/mercurial/packagescan.py b/mercurial/packagescan.py --- a/mercurial/packagescan.py +++ b/mercurial/packagescan.py @@ -60,8 +60,16 @@ def demandload(scope, modules): if type(scope[f]) == types.ModuleType: requiredmodules[scope[f].__name__] = 1 +class SkipPackage(Exception): + def __init__(self, reason): + self.reason = reason + +scan_in_progress = False + def scan(libpath,packagename): """ helper for finding all required modules of package """ + global scan_in_progress + scan_in_progress = True # Use the package in the build directory libpath = os.path.abspath(libpath) sys.path.insert(0,libpath) @@ -85,7 +93,11 @@ def scan(libpath,packagename): tmp = {} mname,ext = os.path.splitext(m) fullname = packagename+'.'+mname - __import__(fullname,tmp,tmp) + try: + __import__(fullname,tmp,tmp) + except SkipPackage, inst: + print >> sys.stderr, 'skipping %s: %s' % (fullname, inst.reason) + continue requiredmodules[fullname] = 1 # Import all extension modules and by that run the fake demandload for m in extmodulefiles: