osmo-ci/lint/lint_diff.sh

79 lines
1.8 KiB
Bash
Executable File

#!/bin/sh -e
# Jenkins runs this script on submitted gerrit patches. Can be used as git pre-commit hook.
COMMIT="$1"
GIT_DIR="$(git rev-parse --show-toplevel 2>/dev/null || true)"
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
if [ -z "$GIT_DIR" ]; then
echo "ERROR: path is not a git repository: $PWD"
exit 1
fi
if [ -z "$COMMIT" ]; then
# Clean worktree: diff last commit against the one before
COMMIT="HEAD~1"
if [ -n "$(git status --porcelain)" ]; then
# Dirty worktree: diff uncommitted changes against last commit
COMMIT="HEAD"
fi
fi
ERROR=0
echo "Running docker_run_rm.sh on the whole tree..."
echo
if ! "$SCRIPT_DIR"/docker_run_rm.sh; then
ERROR=1
fi
echo "Running checkpatch on 'git diff $COMMIT'..."
echo
if ! git diff -U0 "$COMMIT" | "$SCRIPT_DIR/checkpatch/checkpatch_osmo.sh" - \
--color=always \
--mailback \
--show-types \
--showfile \
--terse
then
ERROR=1
fi
if [ "$ERROR" = 1 ]; then
echo
echo "Please fix the linting errors above. More information:"
echo "https://osmocom.org/projects/cellular-infrastructure/wiki/Linting"
echo
if [ -n "$JENKINS_HOME" ]; then
echo "Leaving review comments in gerrit..."
set -x
# Run again, but in the proper format for checkpatch_json.py
# and store the output in a file
git diff -U0 "$COMMIT" | "$SCRIPT_DIR/checkpatch/checkpatch_osmo.sh" \
> ../checkpatch_output || true
cd ..
# Convert to gerrit review format
"$SCRIPT_DIR/checkpatch/checkpatch_json.py" \
checkpatch_output \
gerrit_report.json \
"$BUILD_TAG" \
"$BUILD_URL"
# Apply as review in gerrit
ssh \
-p "$GERRIT_PORT" \
-l jenkins \
"$GERRIT_HOST" \
gerrit \
review \
--project "$GERRIT_PROJECT" \
"$GERRIT_CHANGE_NUMBER,$GERRIT_PATCHSET_NUMBER" \
--json \
< gerrit_report.json
fi
exit 1
fi