| #!/usr/bin/env bash |
| |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" |
| SPARK_ROOT_DIR="$(dirname "$SCRIPT_DIR")" |
| PATHS_TO_CHECK="./python/pyspark/ ./ec2/spark_ec2.py ./examples/src/main/python/ ./dev/sparktestsupport" |
| PATHS_TO_CHECK="$PATHS_TO_CHECK ./dev/run-tests.py ./python/run-tests.py" |
| PEP8_REPORT_PATH="$SPARK_ROOT_DIR/dev/pep8-report.txt" |
| PYLINT_REPORT_PATH="$SPARK_ROOT_DIR/dev/pylint-report.txt" |
| PYLINT_INSTALL_INFO="$SPARK_ROOT_DIR/dev/pylint-info.txt" |
| |
| cd "$SPARK_ROOT_DIR" |
| |
| # compileall: https://docs.python.org/2/library/compileall.html |
| python -B -m compileall -q -l $PATHS_TO_CHECK > "$PEP8_REPORT_PATH" |
| compile_status="${PIPESTATUS[0]}" |
| |
| # Get pep8 at runtime so that we don't rely on it being installed on the build server. |
| #+ See: https://github.com/apache/spark/pull/1744#issuecomment-50982162 |
| #+ TODOs: |
| #+ - Download pep8 from PyPI. It's more "official". |
| PEP8_VERSION="1.6.2" |
| PEP8_SCRIPT_PATH="$SPARK_ROOT_DIR/dev/pep8-$PEP8_VERSION.py" |
| PEP8_SCRIPT_REMOTE_PATH="https://raw.githubusercontent.com/jcrocholl/pep8/$PEP8_VERSION/pep8.py" |
| |
| if [ ! -e "$PEP8_SCRIPT_PATH" ]; then |
| curl --silent -o "$PEP8_SCRIPT_PATH" "$PEP8_SCRIPT_REMOTE_PATH" |
| curl_status="$?" |
| |
| if [ "$curl_status" -ne 0 ]; then |
| echo "Failed to download pep8.py from \"$PEP8_SCRIPT_REMOTE_PATH\"." |
| exit "$curl_status" |
| fi |
| fi |
| |
| # Easy install pylint in /dev/pylint. To easy_install into a directory, the PYTHONPATH should |
| # be set to the directory. |
| # dev/pylint should be appended to the PATH variable as well. |
| # Jenkins by default installs the pylint3 version, so for now this just checks the code quality |
| # of python3. |
| export "PYTHONPATH=$SPARK_ROOT_DIR/dev/pylint" |
| export "PYLINT_HOME=$PYTHONPATH" |
| export "PATH=$PYTHONPATH:$PATH" |
| |
| # if [ ! -d "$PYLINT_HOME" ]; then |
| # mkdir "$PYLINT_HOME" |
| # # Redirect the annoying pylint installation output. |
| # easy_install -d "$PYLINT_HOME" pylint==1.4.4 &>> "$PYLINT_INSTALL_INFO" |
| # easy_install_status="$?" |
| # |
| # if [ "$easy_install_status" -ne 0 ]; then |
| # echo "Unable to install pylint locally in \"$PYTHONPATH\"." |
| # cat "$PYLINT_INSTALL_INFO" |
| # exit "$easy_install_status" |
| # fi |
| # |
| # rm "$PYLINT_INSTALL_INFO" |
| # |
| # fi |
| |
| # There is no need to write this output to a file |
| #+ first, but we do so so that the check status can |
| #+ be output before the report, like with the |
| #+ scalastyle and RAT checks. |
| python "$PEP8_SCRIPT_PATH" --ignore=E402,E731,E241,W503,E226 $PATHS_TO_CHECK >> "$PEP8_REPORT_PATH" |
| pep8_status="${PIPESTATUS[0]}" |
| |
| if [ "$compile_status" -eq 0 -a "$pep8_status" -eq 0 ]; then |
| lint_status=0 |
| else |
| lint_status=1 |
| fi |
| |
| if [ "$lint_status" -ne 0 ]; then |
| echo "PEP8 checks failed." |
| cat "$PEP8_REPORT_PATH" |
| else |
| echo "PEP8 checks passed." |
| fi |
| |
| rm "$PEP8_REPORT_PATH" |
| |
| # for to_be_checked in "$PATHS_TO_CHECK" |
| # do |
| # pylint --rcfile="$SPARK_ROOT_DIR/pylintrc" $to_be_checked >> "$PYLINT_REPORT_PATH" |
| # done |
| |
| # if [ "${PIPESTATUS[0]}" -ne 0 ]; then |
| # lint_status=1 |
| # echo "Pylint checks failed." |
| # cat "$PYLINT_REPORT_PATH" |
| # else |
| # echo "Pylint checks passed." |
| # fi |
| |
| # rm "$PYLINT_REPORT_PATH" |
| |
| exit "$lint_status" |