refactor(husky): 重写 CHANGELOG 自动更新格式匹配根目录
- 检测逻辑:从 "## [日期] - 标题" 改为 "^## 日期" - 生成格式:匹配根目录格式(时间 + commit hash + 文件列表) - 插入逻辑:追加到日期下,而非文件开头 - 解决误判问题,现在能正确识别今日已有条目 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Showing
1 changed file
with
47 additions
and
32 deletions
| ... | @@ -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 | # 替换原文件 | ... | ... |
-
Please register or login to post a comment