| Index: gclient_utils.py
|
| diff --git a/gclient_utils.py b/gclient_utils.py
|
| index 1efa036f6e99b970dea91e4d6d0c3b96e368e90f..434945677f1f01eab59d7993ab427c1911b76a1b 100644
|
| --- a/gclient_utils.py
|
| +++ b/gclient_utils.py
|
| @@ -23,7 +23,6 @@ import subprocess
|
| import sys
|
| import threading
|
| import time
|
| -import threading
|
| import xml.dom.minidom
|
| import xml.parsers.expat
|
|
|
| @@ -39,8 +38,31 @@ class CheckCallError(OSError):
|
| self.stderr = stderr
|
|
|
|
|
| +def Popen(*args, **kwargs):
|
| + """Calls subprocess.Popen() with hacks to work around certain behaviors.
|
| +
|
| + Ensure English outpout for svn and make it work reliably on Windows.
|
| + """
|
| + copied = False
|
| + if not 'env' in kwargs:
|
| + copied = True
|
| + kwargs = kwargs.copy()
|
| + # It's easier to parse the stdout if it is always in English.
|
| + kwargs['env'] = os.environ.copy()
|
| + kwargs['env']['LANGUAGE'] = 'en'
|
| + if not 'shell' in kwargs:
|
| + if not copied:
|
| + kwargs = kwargs.copy()
|
| + # *Sigh*: Windows needs shell=True, or else it won't search %PATH% for the
|
| + # executable, but shell=True makes subprocess on Linux fail when it's called
|
| + # with a list because it only tries to execute the first item in the list.
|
| + kwargs['shell'] = (sys.platform=='win32')
|
| + return subprocess.Popen(*args, **kwargs)
|
| +
|
| +
|
| def CheckCall(command, cwd=None, print_error=True):
|
| - """Like subprocess.check_call() but returns stdout.
|
| + """Similar subprocess.check_call() but redirects stdout and
|
| + returns (stdout, stderr).
|
|
|
| Works on python 2.4
|
| """
|
| @@ -49,13 +71,7 @@ def CheckCall(command, cwd=None, print_error=True):
|
| stderr = None
|
| if not print_error:
|
| stderr = subprocess.PIPE
|
| - env = os.environ.copy()
|
| - env['LANGUAGE'] = 'en'
|
| - process = subprocess.Popen(command, cwd=cwd,
|
| - shell=sys.platform.startswith('win'),
|
| - stdout=subprocess.PIPE,
|
| - stderr=stderr,
|
| - env=env)
|
| + process = Popen(command, cwd=cwd, stdout=subprocess.PIPE, stderr=stderr)
|
| std_out, std_err = process.communicate()
|
| except OSError, e:
|
| raise CheckCallError(command, cwd, e.errno, None)
|
| @@ -275,15 +291,9 @@ def SubprocessCallAndFilter(command,
|
| if print_messages:
|
| print('\n________ running \'%s\' in \'%s\''
|
| % (' '.join(command), in_directory))
|
| - env = os.environ.copy()
|
| - env['LANGUAGE'] = 'en'
|
|
|
| - # *Sigh*: Windows needs shell=True, or else it won't search %PATH% for the
|
| - # executable, but shell=True makes subprocess on Linux fail when it's called
|
| - # with a list because it only tries to execute the first item in the list.
|
| - kid = subprocess.Popen(command, bufsize=0, cwd=in_directory,
|
| - shell=(sys.platform == 'win32'), stdout=subprocess.PIPE,
|
| - stderr=subprocess.STDOUT, env=env)
|
| + kid = Popen(command, bufsize=0, cwd=in_directory,
|
| + stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
|
| # Do a flush of sys.stdout before we begin reading from the subprocess's
|
| # stdout.
|
| @@ -323,7 +333,7 @@ def SubprocessCallAndFilter(command,
|
| msg = 'failed to run command: %s' % ' '.join(command)
|
|
|
| if fail_status != None:
|
| - print >>sys.stderr, msg
|
| + print >> sys.stderr, msg
|
| sys.exit(fail_status)
|
|
|
| raise Error(msg)
|
| @@ -333,10 +343,10 @@ def FindGclientRoot(from_dir, filename='.gclient'):
|
| """Tries to find the gclient root."""
|
| path = os.path.realpath(from_dir)
|
| while not os.path.exists(os.path.join(path, filename)):
|
| - next = os.path.split(path)
|
| - if not next[1]:
|
| + split_path = os.path.split(path)
|
| + if not split_path[1]:
|
| return None
|
| - path = next[0]
|
| + path = split_path[0]
|
| logging.info('Found gclient root at ' + path)
|
| return path
|
|
|
|
|