hookehuyr

refactor(husky): 重写 CHANGELOG 自动更新格式匹配根目录

- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期"
- 生成格式:匹配根目录格式(时间 + commit hash + 文件列表)
- 插入逻辑:追加到日期下,而非文件开头
- 解决误判问题,现在能正确识别今日已有条目

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
...@@ -79,54 +79,69 @@ case "$COMMIT_TYPE" in ...@@ -79,54 +79,69 @@ case "$COMMIT_TYPE" in
79 ;; 79 ;;
80 esac 80 esac
81 81
82 -# 获取当前日期 82 +# 获取当前日期和时间
83 TODAY=$(date +%Y-%m-%d) 83 TODAY=$(date +%Y-%m-%d)
84 +NOW_TIME=$(date +%H:%M:%S)
84 85
85 -# 获取影响的文件 86 +# 获取影响的文件(使用 HEAD~1 对比的文件)
86 -STAGED_FILES=$(git diff --cached --name-only | head -5 | tr '\n' ', ' | sed 's/, $//') 87 +CHANGED_FILES=$(git diff HEAD~1 --name-only | tr '\n' '\n' | sed 's/^/- `/;s/$/`/' | sed '$d')
87 -if [ -z "$STAGED_FILES" ]; then 88 +if [ -z "$CHANGED_FILES" ]; then
88 - STAGED_FILES="无" 89 + CHANGED_FILES="- \`\`"
89 fi 90 fi
90 91
91 -# 生成 CHANGELOG 条目 92 +# 获取 commit hash(短格式)
92 -CHANGELOG_ENTRY="## [$TODAY] - $COMMIT_SUBJECT 93 +COMMIT_HASH=$(git log -1 --pretty=%h)
93 94
94 -### $CHANGE_TYPE 95 +# 生成 CHANGELOG 条目(匹配根目录格式)
95 -- $COMMIT_SUBJECT$COMMIT_SCOPE 96 +CHANGELOG_ENTRY="### $NOW_TIME - $COMMIT_TYPE($COMMIT_SCOPE): $COMMIT_SUBJECT
96 97
97 ---- 98 +**影响文件**:
99 +$CHANGED_FILES
100 +
101 +**变更摘要**:
102 +- $COMMIT_SUBJECT
103 +
104 +**相关提交**:
105 +- \`$COMMIT_HASH\` - $COMMIT_TYPE($COMMIT_SCOPE): $COMMIT_SUBJECT
98 106
99 -**详细信息** 107 +---
100 -- **影响文件**: $STAGED_FILES
101 -- **技术栈**: Taro 4, Vue 3, NutUI
102 -- **测试状态**: 待验证
103 -- **备注**: 自动生成
104 108
105 " 109 "
106 110
107 -# 检查今天是否已有相同标题的条目 111 +# 检查今天是否已有条目
108 -if grep -q "## \[$TODAY\] - $COMMIT_SUBJECT" "$CHANGELOG_FILE"; then 112 +if grep -q "^## $TODAY" "$CHANGELOG_FILE"; then
109 - echo " ${YELLOW}⚠️ CHANGELOG 中已存在今日相同条目,跳过${NC}" 113 + # 今天已有条目,找到日期行号,在日期后追加
110 - exit 0 114 + DATE_LINE=$(grep -n "^## $TODAY" "$CHANGELOG_FILE" | head -1 | cut -d: -f1)
111 -fi
112 115
113 -# 创建临时文件 116 + # 创建临时文件
114 -TEMP_FILE=$(mktemp) 117 + TEMP_FILE=$(mktemp)
115 118
116 -# 将新条目插入到文件开头(跳过可能的文件头注释) 119 + # 读取日期行之前的内容
117 -# 找到第一个 ## [ 开头的行,在它之前插入 120 + head -n $DATE_LINE "$CHANGELOG_FILE" > "$TEMP_FILE"
118 -if grep -q "^## \[" "$CHANGELOG_FILE"; then
119 - # 找到第一个条目的行号
120 - FIRST_ENTRY_LINE=$(grep -n "^## \[" "$CHANGELOG_FILE" | head -1 | cut -d: -f1)
121 121
122 - # 将新条目和原有内容合并 122 + # 在日期后追加新条目
123 - head -n $((FIRST_ENTRY_LINE - 1)) "$CHANGELOG_FILE" > "$TEMP_FILE"
124 echo "$CHANGELOG_ENTRY" >> "$TEMP_FILE" 123 echo "$CHANGELOG_ENTRY" >> "$TEMP_FILE"
125 - tail -n +$FIRST_ENTRY_LINE "$CHANGELOG_FILE" >> "$TEMP_FILE" 124 +
125 + # 追加日期行之后的内容(从日期行+1开始)
126 + tail -n +$((DATE_LINE + 1)) "$CHANGELOG_FILE" >> "$TEMP_FILE"
127 +
128 + # 替换原文件
129 + mv "$TEMP_FILE" "$CHANGELOG_FILE"
126 else 130 else
127 - # 如果没有找到条目,直接追加 131 + # 今天没有条目,创建新的日期部分
128 - cat "$CHANGELOG_FILE" > "$TEMP_FILE" 132 + TEMP_FILE=$(mktemp)
133 +
134 + # 新建日期标题和条目
135 + echo "## $TODAY" > "$TEMP_FILE"
136 + echo "" >> "$TEMP_FILE"
129 echo "$CHANGELOG_ENTRY" >> "$TEMP_FILE" 137 echo "$CHANGELOG_ENTRY" >> "$TEMP_FILE"
138 + echo "" >> "$TEMP_FILE"
139 +
140 + # 追加原文件内容
141 + cat "$CHANGELOG_FILE" >> "$TEMP_FILE"
142 +
143 + # 替换原文件
144 + mv "$TEMP_FILE" "$CHANGELOG_FILE"
130 fi 145 fi
131 146
132 # 替换原文件 147 # 替换原文件
......