Mercurial > hg > gitweb
view mercurial/packagescan.py @ 2096:f5ebe964c6be
Ignore EPIPE in pipefilter
This hides the following traceback (there's a race condition involved,
so you may have to try a few times to hit it):
$ hg sign --key key-that-does-not-exist
Signing 2062:4bad92f4ea65
gpg: skipped "key-that-does-not-exist": secret key not available
gpg: signing failed: secret key not available
Exception in thread Thread-1:
Traceback (most recent call last):
File "threading.py", line 442, in __bootstrap
self.run()
File "threading.py", line 422, in run
self.__target(*self.__args, **self.__kwargs)
File "mercurial/util.py", line 24, in writer
pin.close()
IOError: [Errno 32] Broken pipe
abort: Error while signing
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Wed, 19 Apr 2006 11:41:25 -0700 |
parents | 7f12a63568ae |
children | 685597676a13 c58a403aa830 |
line wrap: on
line source
# packagescan.py - Helper module for identifing used modules. # Used for the py2exe distutil. # # Copyright 2005 Volker Kleinfeld <Volker.Kleinfeld@gmx.de> # # This software may be used and distributed according to the terms # of the GNU General Public License, incorporated herein by reference. import glob import os import sys import demandload import ihooks requiredmodules = {} # Will contain the modules imported by demandload def demandload(scope, modules): """ fake demandload function that collects the required modules """ for m in modules.split(): mod = None try: module, submodules = m.split(':') submodules = submodules.split(',') except: module = m submodules = [] mod = __import__(module, scope, scope, submodules) scope[module] = mod requiredmodules[mod.__name__] = 1 def getmodules(libpath,packagename): """ helper for finding all required modules of package <packagename> """ # Use the package in the build directory libpath = os.path.abspath(libpath) sys.path.insert(0,libpath) packdir = os.path.join(libpath,packagename) # A normal import would not find the package in # the build directory. ihook is used to force the import. # After the package is imported the import scope for # the following imports is settled. p = importfrom(packdir) globals()[packagename] = p sys.modules[packagename] = p # Fetch the python modules in the package cwd = os.getcwd() os.chdir(packdir) pymodulefiles = glob.glob('*.py') extmodulefiles = glob.glob('*.pyd') os.chdir(cwd) # Install a fake demandload module sys.modules['mercurial.demandload'] = sys.modules['mercurial.packagescan'] # Import all python modules and by that run the fake demandload for m in pymodulefiles: if m == '__init__.py': continue tmp = {} mname,ext = os.path.splitext(m) fullname = packagename+'.'+mname __import__(fullname,tmp,tmp) requiredmodules[fullname] = 1 # Import all extension modules and by that run the fake demandload for m in extmodulefiles: tmp = {} mname,ext = os.path.splitext(m) fullname = packagename+'.'+mname __import__(fullname,tmp,tmp) requiredmodules[fullname] = 1 includes = requiredmodules.keys() return includes def importfrom(filename): """ import module/package from a named file and returns the module. It does not check on sys.modules or includes the module in the scope. """ loader = ihooks.BasicModuleLoader() path, file = os.path.split(filename) name, ext = os.path.splitext(file) m = loader.find_module_in_dir(name, path) if not m: raise ImportError, name m = loader.load_module(name, m) return m