| Index: subprocess2.py
|
| diff --git a/subprocess2.py b/subprocess2.py
|
| index d59035b4878f008e8c7b1596cc4aefdebb67f947..9aefeea45702ca2ab177593539acf4ab1c240991 100644
|
| --- a/subprocess2.py
|
| +++ b/subprocess2.py
|
| @@ -7,6 +7,7 @@
|
| In theory you shouldn't need anything else in subprocess, or this module failed.
|
| """
|
|
|
| +import errno
|
| import logging
|
| import os
|
| import subprocess
|
| @@ -79,7 +80,7 @@ def get_english_env(env):
|
|
|
|
|
| def Popen(args, **kwargs):
|
| - """Wraps subprocess.Popen().
|
| + """Wraps subprocess.Popen() with various workarounds.
|
|
|
| Forces English output since it's easier to parse the stdout if it is always in
|
| English.
|
| @@ -87,7 +88,8 @@ def Popen(args, **kwargs):
|
| Sets shell=True on windows by default. You can override this by forcing shell
|
| parameter to a value.
|
|
|
| - Popen() can throw OSError when cwd or args[0] doesn't exist.
|
| + Popen() can throw OSError when cwd or args[0] doesn't exist. Translate
|
| + exceptions generated by cygwin when it fails trying to emulate fork().
|
| """
|
| # Make sure we hack subprocess if necessary.
|
| hack_subprocess()
|
| @@ -106,7 +108,20 @@ def Popen(args, **kwargs):
|
| if kwargs.get('cwd', None):
|
| tmp_str += '; cwd=%s' % kwargs['cwd']
|
| logging.debug(tmp_str)
|
| - return subprocess.Popen(args, **kwargs)
|
| + try:
|
| + return subprocess.Popen(args, **kwargs)
|
| + except OSError, e:
|
| + if e.errno == errno.EAGAIN and sys.platform == 'cygwin':
|
| + # Convert fork() emulation failure into a CalledProcessError().
|
| + raise CalledProcessError(
|
| + e.errno,
|
| + args,
|
| + kwargs.get('cwd'),
|
| + 'Visit '
|
| + 'http://code.google.com/p/chromium/wiki/CygwinDllRemappingFailure to '
|
| + 'learn how to fix this error; you need to rebase your cygwin dlls',
|
| + None)
|
| + raise
|
|
|
|
|
| def call(args, timeout=None, **kwargs):
|
|
|