已合并
support pre commit function flow #2042
张旭创建于 4月2日
support pre commit function flow #2042
已合并
张旭创建于 4月2日
3 个文件变更+562-1
@@ -61,4 +61,7 @@ ascend_download
61tbetoolkits-*.log61tbetoolkits-*.log
62*_result.csv62*_result.csv
63 63 
64-/third_party64+third_party/
65+oat_reports/
66+ 
67+log/
@@ -0,0 +1,18 @@
1+repos:
2+ - repo: https://github.com/pre-commit/mirrors-clang-format
3+ rev: v16.0.0
4+ hooks:
5+ - id: clang-format
6+ types_or: [c++, c]
7+
8+ # OAT compliance check (Open Source Audit Tool)
9+ - repo: local
10+ hooks:
11+ - id: oat-check
12+ name: OAT Compliance Check
13+ entry: bash scripts/oat_check.sh
14+ language: system
15+ pass_filenames: true
16+ types: [file]
17+ stages: [commit]
18+ verbose: true
@@ -0,0 +1,540 @@
1+#!/bin/sh
2+# -----------------------------------------------------------------------------------------------------------
3+# Copyright (c) 2026 Huawei Technologies Co., Ltd.
4+# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
5+# CANN Open Software License Agreement Version 2.0 (the "License").
6+# Please refer to the License for details. You may not use this file except in compliance with the License.
7+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
8+# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
9+# See LICENSE in the root of the software repository for the full text of the License.
10+# -----------------------------------------------------------------------------------------------------------
11+# OAT Pre-commit Check Script (for pre-commit framework)
12+# This script is called by pre-commit framework automatically
13+#
14+ 
15+# --- Self-healing: strip Windows CRLF line endings ---
16+# When this script is edited on Windows, Git may introduce \r\n line endings
17+# which cause "command not found" or syntax errors on Linux/macOS.
18+# Solution: detect and strip \r in-place, then re-exec with a clean copy.
19+# This block intentionally runs before 'set -e'.
20+_SCRIPT="$(cd "$(dirname "$0")" && pwd)/$(basename "$0")"
21+if sed 's/\r//' "$_SCRIPT" | diff -q - "$_SCRIPT" >/dev/null 2>&1; then
22+ : # No CRLF found, continue normally
23+else
24+ echo "[OAT] CRLF line endings detected, auto-fixing script and re-running..."
25+ _TMP="${_SCRIPT}.lf"
26+ sed 's/\r//' "$_SCRIPT" > "$_TMP" && mv "$_TMP" "$_SCRIPT"
27+ exec sh "$_SCRIPT" "$@"
28+fi
29+ 
30+set -e
31+ 
32+REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
33+REPO_NAME=$(basename "$REPO_ROOT")
34+SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
35+OAT_DIR="$REPO_ROOT/../tools_oat"
36+OAT_GIT_URL="https://gitcode.com/openharmony-sig/tools_oat.git"
37+OAT_JAR_PATTERN="$OAT_DIR/target/ohos_ossaudittool-*.jar"
38+OAT_REPORT_DIR="$REPO_ROOT/oat_reports"
39+OAT_POLICY="filetype:!binary~must|!archive~must;license:*@.*"
40+ 
41+echo "[OAT] Running OAT scan (binary files + license headers) - INCREMENTAL MODE..."
42+echo "[OAT] Project: $REPO_NAME"
43+ 
44+# --- 1. Get list of files to be committed ---
45+if [ $# -gt 0 ]; then
46+ # Files passed as arguments from pre-commit
47+ STAGED_FILES="$@"
48+ FILE_COUNT=$#
49+else
50+ # Fallback: get from git
51+ STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
52+ if [ -z "$STAGED_FILES" ]; then
53+ echo "[OAT] No files to check. Skipping OAT scan."
54+ exit 0
55+ fi
56+ FILE_COUNT=$(echo "$STAGED_FILES" | wc -l)
57+fi
58+ 
59+echo "[OAT] Checking $FILE_COUNT staged file(s)..."
60+ 
61+# Convert file list to absolute paths and join with |
62+FILE_LIST=""
63+for file in $STAGED_FILES; do
64+ # Convert to absolute path if relative
65+ if [ "${file#/}" = "$file" ]; then
66+ # Relative path
67+ file="$REPO_ROOT/$file"
68+ fi
69+
70+ if [ -z "$FILE_LIST" ]; then
71+ FILE_LIST="$file"
72+ else
73+ FILE_LIST="$FILE_LIST|$file"
74+ fi
75+done
76+ 
77+# --- 2. Check Java environment ---
78+echo ""
79+echo "[OAT] Checking runtime environment..."
80+ 
81+if ! command -v java >/dev/null 2>&1; then
82+ echo ""
83+ echo "===================================================================="
84+ echo " Java 未安装 - 正在尝试自动安装"
85+ echo "===================================================================="
86+ echo ""
87+ echo "[OAT] 检测到系统未安装 Java,开始自动安装..."
88+ echo "[OAT] 注意: 首次安装需要下载约 50-100MB,可能需要 2-5 分钟"
89+ echo ""
90+
91+ # Detect OS
92+ OS_TYPE="unknown"
93+ if [ "$(uname)" = "Linux" ]; then
94+ OS_TYPE="linux"
95+ elif [ "$(uname)" = "Darwin" ]; then
96+ OS_TYPE="macos"
97+ elif [ -n "$WINDIR" ] || [ "$(uname -o 2>/dev/null)" = "Msys" ] || [ "$(uname -o 2>/dev/null)" = "Cygwin" ]; then
98+ OS_TYPE="windows"
99+ fi
100+
101+ echo "[OAT] 检测到操作系统: $OS_TYPE"
102+ echo ""
103+
104+ JAVA_INSTALLED=false
105+
106+ # Linux: 使用 apt / yum
107+ if [ "$OS_TYPE" = "linux" ]; then
108+ if command -v apt-get >/dev/null 2>&1; then
109+ echo "[OAT] 使用 apt 安装 OpenJDK 21..."
110+ echo "[OAT] 可能需要输入管理员密码"
111+ echo ""
112+
113+ sudo apt-get update -qq >/dev/null 2>&1
114+ sudo apt-get install -y openjdk-21-jre >/dev/null 2>&1
115+
116+ if [ $? -eq 0 ]; then
117+ JAVA_INSTALLED=true
118+ echo "[OAT] [OK] OpenJDK 21 安装成功"
119+ else
120+ echo "[OAT] [ERROR] 自动安装失败"
121+ fi
122+ elif command -v yum >/dev/null 2>&1; then
123+ echo "[OAT] 使用 yum 安装 OpenJDK 21..."
124+ sudo yum install -y java-21-openjdk >/dev/null 2>&1
125+
126+ if [ $? -eq 0 ]; then
127+ JAVA_INSTALLED=true
128+ echo "[OAT] [OK] OpenJDK 21 安装成功"
129+ fi
130+ fi
131+
132+ # macOS: 使用 Homebrew
133+ elif [ "$OS_TYPE" = "macos" ]; then
134+ if command -v brew >/dev/null 2>&1; then
135+ echo "[OAT] 使用 Homebrew 安装 OpenJDK 21..."
136+ echo "[OAT] 这可能需要几分钟..."
137+ echo ""
138+
139+ brew install openjdk@21 >/dev/null 2>&1
140+
141+ if [ $? -eq 0 ]; then
142+ JAVA_INSTALLED=true
143+ echo "[OAT] [OK] OpenJDK 21 安装成功"
144+
145+ # Add to PATH for current session (Intel & Apple Silicon)
146+ if [ -d "/usr/local/opt/openjdk@21/bin" ]; then
147+ export PATH="/usr/local/opt/openjdk@21/bin:$PATH"
148+ elif [ -d "/opt/homebrew/opt/openjdk@21/bin" ]; then
149+ export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"
150+ fi
151+ else
152+ echo "[OAT] [ERROR] 自动安装失败"
153+ fi
154+ else
155+ echo "[OAT] [ERROR] Homebrew 未安装"
156+ echo "[OAT] 请先安装 Homebrew: https://brew.sh/"
157+ fi
158+
159+ # Windows: 提供下载链接(无法自动安装)
160+ elif [ "$OS_TYPE" = "windows" ]; then
161+ echo "[OAT] Windows 系统无法自动安装 Java"
162+ echo "[OAT] 请手动下载并安装 Java 23:"
163+ echo ""
164+ echo " 方式一(推荐)- Oracle JDK 23 官方安装包:"
165+ echo " https://www.oracle.com/java/technologies/downloads/#java23-windows"
166+ echo " 下载 Windows x64 Installer (.exe) 直接安装"
167+ echo ""
168+ echo " 方式二 - Scoop(命令行安装):"
169+ echo " scoop bucket add java"
170+ echo " scoop install temurin23-jdk"
171+ echo ""
172+ echo " 安装后重启 Git Bash,验证: java -version"
173+ echo ""
174+ echo "[OAT] 跳过 OAT 检查,继续提交..."
175+ echo "[OAT] 建议安装 Java 后再次运行检查"
176+ echo ""
177+ exit 0
178+ fi
179+
180+ # Verify installation
181+ if [ "$JAVA_INSTALLED" = true ]; then
182+ if command -v java >/dev/null 2>&1; then
183+ JAVA_VERSION=$(java -version 2>&1 | head -n 1)
184+ echo "[OAT] [OK] Java 安装验证通过: $JAVA_VERSION"
185+ echo ""
186+ else
187+ echo "[OAT] [ERROR] Java 安装后仍无法使用,可能需要重启终端"
188+ echo ""
189+ echo "请尝试:"
190+ echo " 1. 关闭并重新打开终端"
191+ echo " 2. 运行: source ~/.bashrc (Linux) 或 source ~/.zshrc (macOS)"
192+ echo " 3. 重新提交: git commit"
193+ echo ""
194+ echo "[OAT] 跳过 OAT 检查,继续提交..."
195+ echo "[OAT] 建议重启终端后再次运行检查"
196+ echo ""
197+ exit 0
198+ fi
199+ else
200+ echo ""
201+ echo "[OAT] 自动安装失败,跳过 OAT 检查"
202+ echo ""
203+ echo "手动安装方法:"
204+ echo " Linux: sudo apt install openjdk-21-jre"
205+ echo " macOS: brew install openjdk@21"
206+ echo " Windows: https://www.oracle.com/java/technologies/downloads/#java23-windows"
207+ echo ""
208+ echo "[OAT] 继续提交(未进行合规性检查)..."
209+ echo "[OAT] 建议安装 Java 后再次运行: pre-commit run oat-check"
210+ echo ""
211+ exit 0
212+ fi
213+fi
214+ 
215+JAVA_VERSION=$(java -version 2>&1 | head -n 1)
216+echo " [OK] Java: $JAVA_VERSION"
217+ 
218+# --- 3. Check Maven environment ---
219+echo ""
220+echo "[OAT] Checking Maven environment..."
221+ 
222+if ! command -v mvn >/dev/null 2>&1; then
223+ echo ""
224+ echo "===================================================================="
225+ echo " Maven 未安装 - 正在尝试自动安装"
226+ echo "===================================================================="
227+ echo ""
228+ echo "[OAT] 检测到系统未安装 Maven,开始自动安装..."
229+ echo "[OAT] 注意: 首次安装需要下载约 10-20MB"
230+ echo ""
231+
232+ # Detect OS
233+ OS_TYPE="unknown"
234+ if [ "$(uname)" = "Linux" ]; then
235+ OS_TYPE="linux"
236+ elif [ "$(uname)" = "Darwin" ]; then
237+ OS_TYPE="macos"
238+ elif [ -n "$WINDIR" ] || [ "$(uname -o 2>/dev/null)" = "Msys" ] || [ "$(uname -o 2>/dev/null)" = "Cygwin" ]; then
239+ OS_TYPE="windows"
240+ fi
241+
242+ echo "[OAT] 检测到操作系统: $OS_TYPE"
243+ echo ""
244+
245+ MAVEN_INSTALLED=false
246+
247+ # Linux: 使用 apt
248+ if [ "$OS_TYPE" = "linux" ]; then
249+ if command -v apt-get >/dev/null 2>&1; then
250+ echo "[OAT] 使用 apt 安装 Maven..."
251+ echo "[OAT] 可能需要输入管理员密码"
252+ echo ""
253+
254+ sudo apt-get update -qq >/dev/null 2>&1
255+ sudo apt-get install -y maven >/dev/null 2>&1
256+
257+ if [ $? -eq 0 ]; then
258+ MAVEN_INSTALLED=true
259+ echo "[OAT] [OK] Maven 安装成功"
260+ else
261+ echo "[OAT] [ERROR] 自动安装失败"
262+ fi
263+ elif command -v yum >/dev/null 2>&1; then
264+ echo "[OAT] 使用 yum 安装 Maven..."
265+ sudo yum install -y maven >/dev/null 2>&1
266+
267+ if [ $? -eq 0 ]; then
268+ MAVEN_INSTALLED=true
269+ echo "[OAT] [OK] Maven 安装成功"
270+ fi
271+ fi
272+
273+ # macOS: 使用 Homebrew
274+ elif [ "$OS_TYPE" = "macos" ]; then
275+ if command -v brew >/dev/null 2>&1; then
276+ echo "[OAT] 使用 Homebrew 安装 Maven..."
277+ echo "[OAT] 这可能需要几分钟..."
278+ echo ""
279+
280+ brew install maven >/dev/null 2>&1
281+
282+ if [ $? -eq 0 ]; then
283+ MAVEN_INSTALLED=true
284+ echo "[OAT] [OK] Maven 安装成功"
285+ else
286+ echo "[OAT] [ERROR] 自动安装失败"
287+ fi
288+ else
289+ echo "[OAT] [ERROR] Homebrew 未安装"
290+ echo "[OAT] 请先安装 Homebrew: https://brew.sh/"
291+ fi
292+
293+ # Windows: 提供下载链接(无法自动安装)
294+ elif [ "$OS_TYPE" = "windows" ]; then
295+ echo "[OAT] Windows 系统无法自动安装 Maven"
296+ echo "[OAT] 请手动下载并安装:"
297+ echo ""
298+ echo " 1. 访问: https://maven.apache.org/download.cgi"
299+ echo " 2. 下载: apache-maven-3.x.x-bin.zip"
300+ echo " 3. 解压到 C:\\Program Files\\apache-maven-3.x.x"
301+ echo " 4. 添加到系统 PATH"
302+ echo " 5. 重启 Git Bash"
303+ echo " 6. 验证: mvn -version"
304+ echo ""
305+ echo "[OAT] 跳过 OAT 检查,继续提交..."
306+ echo "[OAT] 建议安装 Maven 后再次运行检查"
307+ echo ""
308+ exit 0
309+ fi
310+
311+ # Verify installation
312+ if [ "$MAVEN_INSTALLED" = true ]; then
313+ if command -v mvn >/dev/null 2>&1; then
314+ MAVEN_VERSION=$(mvn -version 2>&1 | head -n 1)
315+ echo "[OAT] [OK] Maven 安装验证通过: $MAVEN_VERSION"
316+ echo ""
317+ else
318+ echo "[OAT] [ERROR] Maven 安装后仍无法使用,可能需要重启终端"
319+ echo ""
320+ echo "请尝试:"
321+ echo " 1. 关闭并重新打开终端"
322+ echo " 2. 运行: source ~/.bashrc (Linux) 或 source ~/.zshrc (macOS)"
323+ echo " 3. 重新提交: git commit"
324+ echo ""
325+ echo "[OAT] 跳过 OAT 检查,继续提交..."
326+ echo "[OAT] 建议重启终端后再次运行检查"
327+ echo ""
328+ exit 0
329+ fi
330+ else
331+ echo ""
332+ echo "[OAT] 自动安装失败,跳过 OAT 检查"
333+ echo ""
334+ echo "手动安装方法:"
335+ echo " Linux: sudo apt install maven"
336+ echo " macOS: brew install maven"
337+ echo " Windows: https://maven.apache.org/download.cgi"
338+ echo ""
339+ echo "[OAT] 继续提交(未进行合规性检查)..."
340+ echo "[OAT] 建议安装 Maven 后再次运行: pre-commit run oat-check"
341+ echo ""
342+ exit 0
343+ fi
344+fi
345+ 
346+MAVEN_VERSION=$(mvn -version 2>&1 | head -n 1)
347+echo " [OK] Maven: $MAVEN_VERSION"
348+ 
349+# --- 4. Clone tools_oat if not present ---
350+if [ ! -d "$OAT_DIR" ]; then
351+ echo ""
352+ echo "[OAT] tools_oat not found. Cloning..."
353+ git clone "$OAT_GIT_URL" "$OAT_DIR" --depth=1 >/dev/null 2>&1
354+ if [ $? -ne 0 ]; then
355+ echo "[OAT] [ERROR] Failed to clone tools_oat."
356+ echo "[OAT] You can manually clone from: $OAT_GIT_URL"
357+ exit 1
358+ fi
359+ echo "[OAT] [OK] tools_oat cloned successfully."
360+fi
361+ 
362+# --- 5. Build OAT jar if not present ---
363+OAT_JAR=$(ls $OAT_JAR_PATTERN 2>/dev/null | head -n 1)
364+ 
365+if [ -z "$OAT_JAR" ]; then
366+ echo ""
367+ echo "[OAT] Building OAT jar with Maven..."
368+ echo "[OAT] This may take a few minutes (first time only)..."
369+
370+ cd "$OAT_DIR"
371+ # Force UTF-8 for entire Maven JVM process (fixes GBK default on Java 11/Windows)
372+ JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8" \
373+ mvn package -q -DskipTests \
374+ -Dfile.encoding=UTF-8 \
375+ -Dproject.build.sourceEncoding=UTF-8 \
376+ -Dproject.reporting.outputEncoding=UTF-8 \
377+ 2>&1 | grep -E "(Building|BUILD SUCCESS|BUILD FAILURE|ERROR)" || true
378+ BUILD_RESULT=${PIPESTATUS[0]}
379+ cd - >/dev/null
380+
381+ OAT_JAR=$(ls $OAT_JAR_PATTERN 2>/dev/null | head -n 1)
382+
383+ if [ -z "$OAT_JAR" ] || [ $BUILD_RESULT -ne 0 ]; then
384+ echo ""
385+ echo "===================================================================="
386+ echo " Maven 打包失败"
387+ echo "===================================================================="
388+ echo ""
389+ echo "[OAT] 无法打包 OAT JAR,跳过 OAT 检查"
390+ echo ""
391+ echo "可能原因:"
392+ echo " 1. Maven 配置问题"
393+ echo " 2. 网络连接问题(无法下载依赖)"
394+ echo " 3. pom.xml 配置错误"
395+ echo ""
396+ echo "建议解决方案:"
397+ echo " 1. 手动打包:"
398+ echo " cd $OAT_DIR"
399+ echo " mvn clean package -DskipTests"
400+ echo ""
401+ echo " 2. 配置 Maven 镜像(国内网络):"
402+ echo " 编辑 ~/.m2/settings.xml 添加阿里云镜像"
403+ echo ""
404+ echo "[OAT] 继续提交(未进行合规性检查)..."
405+ echo "[OAT] 建议修复打包问题后运行: pre-commit run oat-check"
406+ echo ""
407+ exit 0
408+ fi
409+
410+ echo "[OAT] [OK] OAT jar built successfully."
411+ echo "[OAT] JAR location: $OAT_JAR"
412+fi
413+ 
414+echo ""
415+echo " [OK] OAT JAR: $OAT_JAR"
416+ 
417+# --- 6. Run OAT scan in INCREMENTAL mode ---
418+mkdir -p "$OAT_REPORT_DIR"
419+ 
420+# --- Ensure OAT output dirs are in .gitignore (after dirs are created) ---
421+GITIGNORE_FILE="$REPO_ROOT/.gitignore"
422+for _entry in "oat_reports" "log"; do
423+ # Strip \r before grep to handle CRLF files (Windows)
424+ if ! sed 's/\r//' "$GITIGNORE_FILE" 2>/dev/null | grep -qE "^${_entry}/?$"; then
425+ # Use awk to safely append: ensures a leading newline if file doesn't end with one.
426+ # This is fully POSIX-compatible and works on both Windows (Git Bash) and Linux.
427+ awk -v entry="${_entry}/" '
428+ BEGIN { needs_newline = 0 }
429+ { last_line = $0; has_content = 1 }
430+ END {
431+ if (has_content && last_line !~ /^[[:space:]]*$/) {
432+ printf "\n"
433+ }
434+ printf "%s\n", entry
435+ }
436+ ' "$GITIGNORE_FILE" >> "$GITIGNORE_FILE" 2>/dev/null \
437+ || printf "\n%s/\n" "$_entry" >> "$GITIGNORE_FILE"
438+ echo "[OAT] 已将 ${_entry}/ 添加到 .gitignore"
439+ fi
440+done
441+ 
442+echo ""
443+echo "[OAT] Running compliance scan..."
444+java -jar "$OAT_JAR" \
445+ -mode s \
446+ -s "$REPO_ROOT" \
447+ -r "$OAT_REPORT_DIR" \
448+ -n "$REPO_NAME" \
449+ -w 1 \
450+ -f "$FILE_LIST" \
451+ -policy "$OAT_POLICY" >/dev/null 2>&1
452+ 
453+if [ $? -ne 0 ]; then
454+ echo ""
455+ echo "===================================================================="
456+ echo " OAT 扫描执行失败"
457+ echo "===================================================================="
458+ echo ""
459+ echo "[OAT] 扫描失败,跳过 OAT 检查"
460+ echo ""
461+ echo "可能原因:"
462+ echo " 1. JAR 文件损坏"
463+ echo " 2. Java 版本不兼容"
464+ echo " 3. OAT 配置问题"
465+ echo ""
466+ echo "建议解决方案:"
467+ echo " 1. 删除并重新打包 JAR:"
468+ echo " rm $OAT_JAR"
469+ echo " cd $OAT_DIR && mvn clean package -DskipTests"
470+ echo ""
471+ echo " 2. 检查 Java 版本(需要 Java 8+):"
472+ echo " java -version"
473+ echo ""
474+ echo "[OAT] 继续提交(未进行合规性检查)..."
475+ echo "[OAT] 建议修复扫描问题后运行: pre-commit run oat-check"
476+ echo ""
477+ exit 0
478+fi
479+ 
480+# --- 7. Check report and generate result.txt ---
481+REPORT_FILE="$OAT_REPORT_DIR/single/PlainReport_${REPO_NAME}.txt"
482+RESULT_FILE="$OAT_REPORT_DIR/single/result.txt"
483+ 
484+if [ -f "$REPORT_FILE" ]; then
485+ # Extract key information to result.txt
486+ {
487+ echo "==================================="
488+ echo "OAT Scan Result Summary"
489+ echo "==================================="
490+ echo "Scan Time: $(date '+%Y-%m-%d %H:%M:%S')"
491+ echo "Project: $REPO_NAME"
492+ echo "Files Checked: $FILE_COUNT"
493+ echo ""
494+
495+ # Extract Invalid File Type section
496+ echo "-----------------------------------"
497+ awk '/^Invalid File Type Total Count:/{found=1} found{print; if(/^$/ && NR>1 && prev!~/^$/)exit} {prev=$0}' "$REPORT_FILE"
498+
499+ # Extract License Header Invalid section
500+ echo "-----------------------------------"
501+ awk '/^License Header Invalid Total Count:/{found=1} found{print; if(/^$/ && NR>1 && prev!~/^$/)exit} {prev=$0}' "$REPORT_FILE"
502+
503+ echo "==================================="
504+ } > "$RESULT_FILE"
505+
506+ # Check for issues (read from result.txt instead of PlainReport)
507+ INVALID_FILE_TYPE=$(grep "^Invalid File Type Total Count:" "$RESULT_FILE" | grep -oE '[0-9]+' | head -1)
508+ LICENSE_INVALID=$(grep "^License Header Invalid Total Count:" "$RESULT_FILE" | grep -oE '[0-9]+' | head -1)
509+
510+ # Delete PlainReport files to keep only result.txt
511+ echo "[OAT] Cleaning up redundant reports..."
512+ rm -f "$OAT_REPORT_DIR/single/PlainReport_"*.txt
513+
514+ TOTAL_ISSUES=$((INVALID_FILE_TYPE + LICENSE_INVALID))
515+
516+ if [ "$TOTAL_ISSUES" -gt 0 ]; then
517+ echo ""
518+ echo "===================================================================="
519+ echo " 发现合规性问题"
520+ echo "===================================================================="
521+ echo ""
522+ echo "[OAT] Found $TOTAL_ISSUES compliance issue(s):"
523+ echo " - Invalid File Type: $INVALID_FILE_TYPE"
524+ echo " - License Header Invalid: $LICENSE_INVALID"
525+ echo ""
526+ echo "[OAT] 查看详细信息:"
527+ echo " cat $RESULT_FILE"
528+ echo ""
529+ echo "或临时跳过检查:"
530+ echo " git commit --no-verify"
531+ echo ""
532+ exit 1
533+ fi
534+fi
535+ 
536+echo ""
537+echo "[OAT] [OK] All checks passed ($FILE_COUNT file(s) checked)."
538+echo "[OAT] 查看扫描摘要: cat $RESULT_FILE"
539+echo ""
540+exit 0