hookehuyr

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

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

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
......@@ -79,54 +79,69 @@ case "$COMMIT_TYPE" in
;;
esac
# 获取当前日期
# 获取当前日期和时间
TODAY=$(date +%Y-%m-%d)
NOW_TIME=$(date +%H:%M:%S)
# 获取影响的文件
STAGED_FILES=$(git diff --cached --name-only | head -5 | tr '\n' ', ' | sed 's/, $//')
if [ -z "$STAGED_FILES" ]; then
STAGED_FILES="无"
# 获取影响的文件(使用 HEAD~1 对比的文件)
CHANGED_FILES=$(git diff HEAD~1 --name-only | tr '\n' '\n' | sed 's/^/- `/;s/$/`/' | sed '$d')
if [ -z "$CHANGED_FILES" ]; then
CHANGED_FILES="- \`\`"
fi
# 生成 CHANGELOG 条目
CHANGELOG_ENTRY="## [$TODAY] - $COMMIT_SUBJECT
# 获取 commit hash(短格式)
COMMIT_HASH=$(git log -1 --pretty=%h)
### $CHANGE_TYPE
- $COMMIT_SUBJECT$COMMIT_SCOPE
# 生成 CHANGELOG 条目(匹配根目录格式)
CHANGELOG_ENTRY="### $NOW_TIME - $COMMIT_TYPE($COMMIT_SCOPE): $COMMIT_SUBJECT
---
**影响文件**:
$CHANGED_FILES
**变更摘要**:
- $COMMIT_SUBJECT
**相关提交**:
- \`$COMMIT_HASH\` - $COMMIT_TYPE($COMMIT_SCOPE): $COMMIT_SUBJECT
**详细信息**
- **影响文件**: $STAGED_FILES
- **技术栈**: Taro 4, Vue 3, NutUI
- **测试状态**: 待验证
- **备注**: 自动生成
---
"
# 检查今天是否已有相同标题的条目
if grep -q "## \[$TODAY\] - $COMMIT_SUBJECT" "$CHANGELOG_FILE"; then
echo " ${YELLOW}⚠️ CHANGELOG 中已存在今日相同条目,跳过${NC}"
exit 0
fi
# 检查今天是否已有条目
if grep -q "^## $TODAY" "$CHANGELOG_FILE"; then
# 今天已有条目,找到日期行号,在日期后追加
DATE_LINE=$(grep -n "^## $TODAY" "$CHANGELOG_FILE" | head -1 | cut -d: -f1)
# 创建临时文件
TEMP_FILE=$(mktemp)
# 创建临时文件
TEMP_FILE=$(mktemp)
# 将新条目插入到文件开头(跳过可能的文件头注释)
# 找到第一个 ## [ 开头的行,在它之前插入
if grep -q "^## \[" "$CHANGELOG_FILE"; then
# 找到第一个条目的行号
FIRST_ENTRY_LINE=$(grep -n "^## \[" "$CHANGELOG_FILE" | head -1 | cut -d: -f1)
# 读取日期行之前的内容
head -n $DATE_LINE "$CHANGELOG_FILE" > "$TEMP_FILE"
# 将新条目和原有内容合并
head -n $((FIRST_ENTRY_LINE - 1)) "$CHANGELOG_FILE" > "$TEMP_FILE"
# 在日期后追加新条目
echo "$CHANGELOG_ENTRY" >> "$TEMP_FILE"
tail -n +$FIRST_ENTRY_LINE "$CHANGELOG_FILE" >> "$TEMP_FILE"
# 追加日期行之后的内容(从日期行+1开始)
tail -n +$((DATE_LINE + 1)) "$CHANGELOG_FILE" >> "$TEMP_FILE"
# 替换原文件
mv "$TEMP_FILE" "$CHANGELOG_FILE"
else
# 如果没有找到条目,直接追加
cat "$CHANGELOG_FILE" > "$TEMP_FILE"
# 今天没有条目,创建新的日期部分
TEMP_FILE=$(mktemp)
# 新建日期标题和条目
echo "## $TODAY" > "$TEMP_FILE"
echo "" >> "$TEMP_FILE"
echo "$CHANGELOG_ENTRY" >> "$TEMP_FILE"
echo "" >> "$TEMP_FILE"
# 追加原文件内容
cat "$CHANGELOG_FILE" >> "$TEMP_FILE"
# 替换原文件
mv "$TEMP_FILE" "$CHANGELOG_FILE"
fi
# 替换原文件
......