pre-commit 代码检查改为委托 _backend-lint / _versionctl-lint / _frontend-check,新增 LFS 指针校验;commit-msg 新增多行空行格式校验和模板注释忽略,移除 CJK/Python 字符集检测;新增 prepare-commit-msg 提交信息模板;hooks-install 增加 source 文件存在性校验;前端 check 补入 tsc -b 类型检查并修复暴露的类型错误
68 lines
1.2 KiB
Bash
Executable File
68 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
MSG_FILE=$1
|
|
|
|
if [ ! -f "$MSG_FILE" ]; then
|
|
printf '%s\n' '提交信息文件不存在。' >&2
|
|
exit 1
|
|
fi
|
|
|
|
FIRST_LINE=
|
|
SECOND_LINE=
|
|
HAS_BODY=
|
|
LINE_NO=0
|
|
|
|
while IFS= read -r LINE || [ -n "$LINE" ]; do
|
|
case "$LINE" in
|
|
\#*) continue ;;
|
|
esac
|
|
|
|
if [ -z "$FIRST_LINE" ]; then
|
|
[ -n "$LINE" ] || continue
|
|
FIRST_LINE=$LINE
|
|
LINE_NO=1
|
|
continue
|
|
fi
|
|
|
|
LINE_NO=$((LINE_NO + 1))
|
|
case "$LINE_NO" in
|
|
2) SECOND_LINE=$LINE ;;
|
|
*)
|
|
if [ -n "$LINE" ]; then
|
|
HAS_BODY=1
|
|
fi
|
|
;;
|
|
esac
|
|
done < "$MSG_FILE"
|
|
|
|
case "$FIRST_LINE" in
|
|
Merge*)
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
if ! printf '%s\n' "$FIRST_LINE" | grep -Eq '^(feat|fix|refactor|docs|style|test|chore): .+$'; then
|
|
cat >&2 <<'EOF'
|
|
提交信息格式错误。
|
|
|
|
格式: <类型>: <简短描述>
|
|
类型: feat / fix / refactor / docs / style / test / chore
|
|
|
|
示例:
|
|
feat: 添加供应商批量管理功能
|
|
fix: 修复流式响应断连问题
|
|
chore: 版本升迁 v0.2.0
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
if [ ${#FIRST_LINE} -gt 72 ]; then
|
|
printf '%s\n' '警告: 提交信息首行超过 72 个字符,建议保持简短。' >&2
|
|
fi
|
|
|
|
if [ -n "$HAS_BODY" ] && [ -n "$SECOND_LINE" ]; then
|
|
printf '%s\n' '提交信息首行后应为空行,再写详细描述。' >&2
|
|
exit 1
|
|
fi
|