From 401b25c878da7821eda5d3f60b0970d799666659 Mon Sep 17 00:00:00 2001 From: Edward Lesmes Date: Wed, 23 Oct 2019 03:34:12 +0000 Subject: [PATCH] presubmit: Convert literals to strings before setting env variables. On windows on Python 2, only strings can be environment variables, but literals are unicode, so we need to convert to strings before setting env vars. Change-Id: I40e8e6ae4f5497d56efa568153eb65392dbd85e6 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1875108 Reviewed-by: Dirk Pranke Commit-Queue: Edward Lesmes --- presubmit_canned_checks.py | 18 ++++++++++++------ presubmit_support.py | 5 ++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py index 8b9ddaa83..439ee1af4 100644 --- a/presubmit_canned_checks.py +++ b/presubmit_canned_checks.py @@ -744,10 +744,13 @@ def GetPythonUnitTests(input_api, output_api, unit_tests): backpath = [ '.', input_api.os_path.pathsep.join(['..'] * (cwd.count('/') + 1)) ] - if env.get('PYTHONPATH'): - backpath.append(env.get('PYTHONPATH')) - env['PYTHONPATH'] = input_api.os_path.pathsep.join((backpath)) - env.pop('VPYTHON_CLEAR_PYTHONPATH', None) + # We convert to str, since on Windows on Python 2 only strings are allowed + # as environment variables, but literals are unicode since we're importing + # unicode_literals from __future__. + if env.get(str('PYTHONPATH')): + backpath.append(env.get(str('PYTHONPATH'))) + env[str('PYTHONPATH')] = input_api.os_path.pathsep.join((backpath)) + env.pop(str('VPYTHON_CLEAR_PYTHONPATH'), None) cmd = [input_api.python_executable, '-m', '%s' % unit_test] results.append(input_api.Command( name=unit_test_name, @@ -868,8 +871,11 @@ def GetPylint(input_api, output_api, white_list=None, black_list=None, input_api.logging.info('Running pylint on %d files', len(files)) input_api.logging.debug('Running pylint on: %s', files) env = input_api.environ.copy() - env['PYTHONPATH'] = input_api.os_path.pathsep.join(extra_paths_list) - env.pop('VPYTHON_CLEAR_PYTHONPATH', None) + # We convert to str, since on Windows on Python 2 only strings are allowed + # as environment variables, but literals are unicode since we're importing + # unicode_literals from __future__. + env[str('PYTHONPATH')] = input_api.os_path.pathsep.join(extra_paths_list) + env.pop(str('VPYTHON_CLEAR_PYTHONPATH'), None) input_api.logging.debug(' with extra PYTHONPATH: %r', extra_paths_list) def GetPylintCmd(flist, extra, parallel): diff --git a/presubmit_support.py b/presubmit_support.py index d2734edea..e9bc1a64e 100755 --- a/presubmit_support.py +++ b/presubmit_support.py @@ -1511,8 +1511,11 @@ def DoPresubmitChecks(change, old_environ = os.environ try: # Make sure python subprocesses won't generate .pyc files. + # We convert to str, since on Windows on Python 2 only strings are allowed + # as environment variables, but literals are unicode since we're importing + # unicode_literals from __future__. os.environ = os.environ.copy() - os.environ['PYTHONDONTWRITEBYTECODE'] = '1' + os.environ[str('PYTHONDONTWRITEBYTECODE')] = str('1') output = PresubmitOutput(input_stream, output_stream)