blob: 12f7ce3994321635951421f5fd5ffe1161f9fb3f [file] [log] [blame]
#!/bin/bash
#-------------------------------------------------------------------------------
# Copyright (c) 2018-2021, Arm Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#-------------------------------------------------------------------------------
# Capture the path the script is at
CHECKPATCH_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
. "$CHECKPATCH_PATH/../utils.sh"
TFM_PATH="$(fix_win_path $(get_full_path ./))"
# Set the output file to common output directory
OUTPUT_FILE_PATH="$TFM_PATH/checks_reports/checkpatch_report.log"
# Set the chechpatch executable
CHECKPATCH_APP="$CHECKPATCH_PATH/checkpatch.pl"
# Parse the configuration file
CHECKPATCH_CONFG="$(grep -o '^[^#]*' $CHECKPATCH_PATH/checkpatch.conf)"
# Directories which are ignored either because they contain external code
# or documentation/ 3rd party tools
# Please keep it in sync with the excluded directories the CI uses
# https://git.trustedfirmware.org/next/ci/tf-m-ci-scripts.git/tree/run-checkpatch.sh?h=refs/heads/master
SKIP_PATHS='./build-\*:./platform/\*:*/tz_\*:./lib/\*:./platform/ext/\*:./bl2/ext/\*:./docs/\*:./tools/\*'
# Find the intersection of the files changed in the commit, with the union
# of the files in the project, exclding everything in the SKIP_PATHS
# Please keep it in sync with the excluded directories the CI uses
# https://git.trustedfirmware.org/next/ci/tf-m-ci-scripts.git/tree/run-checkpatch.sh?h=refs/heads/master
FIND_CMD="find $TFM_PATH -name '*.[ch]' -a -not \( -path "${SKIP_PATHS//:/ -o -path }" \)"
CARE_LIST=$(eval $FIND_CMD | grep "$(git diff HEAD~1 --name-only)" -)
# Check that script executed from root of git repository
if [ "$(git rev-parse --show-toplevel)/" != $TFM_PATH ]
then
echo "[SCF checkpatch] Please execute script from root of TF-M repository."
exit 1
fi
# Only run checkpatch if there are files to check
if [ -z "$CARE_LIST" ]; then
echo "[SCF checkpatch] Could not find any files of interest in this commit"
exit 0
fi
# Run Checkpatch
git diff HEAD~1 -- $CARE_LIST | $CHECKPATCH_APP $CHECKPATCH_CONFG - | tee -a "$OUTPUT_FILE_PATH"
# Evaluate the result
if [ ${PIPESTATUS[1]} -eq 0 ]; then
echo "[SCF checkpatch: PASS] No new issues have been introduced"
exit 0
else
echo "[SCF checkpatch: WARNING] Raised some Warnings/Errors"
echo "[SCF checkpatch] Output report located at: \"$OUTPUT_FILE_PATH\""
exit 1
fi