#!/bin/bash
set -euo pipefail
TARGET_BRANCH=${TARGET_BRANCH:-develop}
echo "================================================"
echo " Pre-Commit CI 增量检查"
echo "================================================"
echo "[INFO] 目标分支: ${TARGET_BRANCH}"
echo "[INFO] 配置 Git 中文文件名支持"
git config core.quotePath false
echo -e "\n[INFO] 拉取远程分支"
echo "[COMMAND] git fetch origin ${TARGET_BRANCH}"
git fetch origin "${TARGET_BRANCH}"
echo -e "\n[INFO] 获取变更文件列表"
echo "[COMMAND] git diff --name-only --diff-filter=ACMR origin/${TARGET_BRANCH} HEAD"
FILES_ARR=($(git diff --name-only --diff-filter=ACMR origin/${TARGET_BRANCH} HEAD | sort -u))
if [ ${#FILES_ARR[@]} -eq 0 ]; then
echo "[INFO] 无变更文件,检查通过"
exit 0
fi
echo -e "\n[INFO] 变更文件数量: ${#FILES_ARR[@]}"
echo "[INFO] 变更文件列表:"
for f in "${FILES_ARR[@]}"; do echo " $f"; done
echo -e "\n[INFO] 安装 pre-commit"
echo "[COMMAND] pip install pre-commit"
pip install pre-commit
echo -e "\n[INFO] 开始 pre-commit 检查"
echo "[COMMAND] pre-commit run --files ${FILES_ARR[*]}"
set +e
pre-commit run --files "${FILES_ARR[@]}"
CODE=$?
set -e
echo -e "\n================================================================"
if [ ${CODE} -eq 0 ]; then
echo "[INFO] pre-commit 检查全部通过"
else
echo "[ERROR] pre-commit 检查失败"
echo "[INFO] 请在本地执行以下命令修复后重新提交:"
echo ""
echo "1. 安装/初始化环境"
echo "pip install pre-commit && pre-commit install --install-hooks"
echo ""
echo "2. 检查并修复变更文件"
echo "pre-commit run --files ${FILES_ARR[*]}"
fi
echo "================================================================"
exit ${CODE}