Files
chromium_depot_tools/vpython
Bruce Dawson f2b0421fff Report when vpython (Python 2) is run during presubmits
While all Chromium PRESUBMIT.py scripts have been running on Python 2
for a long time they continue to invoke child scripts under Python 2.
Part of the reason for slow progress on this transition is that it is
not easy to tell that this is happening, and most developers probably
assume that Python 3 presubmits implies a lack of Python 2.

This change adds a warning when it detects Python 2 scripts being run.
Typical output (edited for clarity) looks like this:

  git cl presubmit --files "chrome/updater/tools/*;ppapi/generators/*"
...
  Python 2 scripts were run during Python 3 presubmits. Please ask ??? if help is needed in preventing this.
   "depot_tools\pylint-1.5" --args-on-stdin from chrome\updater\tools \
   "depot_tools\pylint-1.5" --args-on-stdin from chrome\updater\tools \
   idl_tests.py from ppapi\generators

If Python 2 scripts launch child scripts, especially if they use
sys.executable, then they will not be reported. However this is a good
thing because it means that the report focuses on the top-level scripts
that drive Python 2 usage.

This change works by modifying vpython.bat to write invocation
information to a text file. The data in this text file is picked up by
presubmit_support.py when it finishes running a set of presubmits.

Bug: 1313804
Change-Id: Ic632b38eae07eca2e02e94358305cc9c998818e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/3699002
Reviewed-by: Gavin Mak <gavinmak@google.com>
Commit-Queue: Bruce Dawson <brucedawson@chromium.org>
2022-06-10 16:42:54 +00:00

60 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright 2018 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# See revert instructions in cipd_manifest.txt
if [[ $VPYTHON_BYPASS == "manually managed python not supported by chrome operations" ]]
then
NEWARGS=()
while [[ $# -gt 0 ]]
do
case "$1" in
-vpython-tool*) # these tools all do something vpython related and quit
exit 0
;;
-vpython*=*) # delete any vpython-specific flag (w/ attached argument)
shift
;;
-vpython*) # delete any vpython-specific flag (w/ separate argument)
shift
shift
;;
--) # stop parsing
NEWARGS+=( "$@" )
break
;;
*) # regular arg
NEWARGS+=( "$1" )
shift
;;
esac
done
exec "python" "${NEWARGS[@]}"
fi
base_dir=$(dirname "$0")
source "$base_dir/cipd_bin_setup.sh"
cipd_bin_setup &> /dev/null
echo $@ from $(pwd) >> "$base_dir/python2_usage.txt"
# If Python bootstrapping is not disabled, make sure Python has been
# bootstrapped and add it to the front of PATH.
if [[ $(uname -s) = MINGW* || $(uname -s) = CYGWIN* ]]; then
cmd.exe //c $0.bat "$@"
elif [[ $DEPOT_TOOLS_BOOTSTRAP_PYTHON3 != 0 ]]; then
if [[ ! -e "$base_dir/python_bin_reldir.txt" ]]; then
source "$base_dir/bootstrap_python3"
bootstrap_python3
fi
PYTHON_BIN_RELDIR="$base_dir/$(cat "$base_dir/python_bin_reldir.txt" | xargs echo)"
exec "$base_dir/.cipd_bin/vpython" -vpython-interpreter "$PYTHON_BIN_RELDIR/python" "$@"
else
exec "$base_dir/.cipd_bin/vpython" "$@"
fi