Files
gerrit/add_changeid.sh
2025-12-22 17:12:39 +08:00

135 lines
3.7 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 为所有 Git 提交添加 Change-Id 的脚本
echo "=========================================="
echo "为所有提交添加 Change-Id"
echo "=========================================="
echo ""
# 检查是否在 Git 仓库中
if [ ! -d .git ]; then
echo "❌ 错误:当前目录不是 Git 仓库"
exit 1
fi
# 步骤 1安装 commit-msg hook
echo "步骤 1: 安装 commit-msg hook..."
echo ""
GIT_DIR=$(git rev-parse --git-dir)
HOOK_PATH="$GIT_DIR/hooks/commit-msg"
# 尝试使用 scp 下载
echo "尝试使用 SCP 下载 hook..."
scp -p -P 29418 renjianbo@101.43.95.130:hooks/commit-msg "$HOOK_PATH" 2>/dev/null
# 如果 scp 失败,使用 curl
if [ ! -f "$HOOK_PATH" ] || [ ! -x "$HOOK_PATH" ]; then
echo "SCP 失败,尝试使用 curl..."
mkdir -p "$GIT_DIR/hooks"
curl -o "$HOOK_PATH" http://101.43.95.130:8080/tools/hooks/commit-msg 2>/dev/null
chmod +x "$HOOK_PATH"
fi
if [ -f "$HOOK_PATH" ] && [ -x "$HOOK_PATH" ]; then
echo "✅ commit-msg hook 安装成功"
else
echo "❌ commit-msg hook 安装失败"
echo "请手动下载:"
echo " curl -o .git/hooks/commit-msg http://101.43.95.130:8080/tools/hooks/commit-msg"
echo " chmod +x .git/hooks/commit-msg"
exit 1
fi
echo ""
# 步骤 2检查有多少提交缺少 Change-Id
echo "步骤 2: 检查缺少 Change-Id 的提交..."
echo ""
MISSING_COUNT=0
git log --format='%H' | while read commit; do
if ! git log -1 --format='%B' "$commit" | grep -q "^Change-Id:"; then
MISSING_COUNT=$((MISSING_COUNT + 1))
fi
done
# 由于管道MISSING_COUNT 在子 shell 中,需要重新计算
MISSING_COUNT=$(git log --format='%H' | while read commit; do
if ! git log -1 --format='%B' "$commit" | grep -q "^Change-Id:"; then
echo "1"
fi
done | wc -l)
if [ "$MISSING_COUNT" -eq 0 ]; then
echo "✅ 所有提交都已包含 Change-Id"
exit 0
fi
echo "找到 $MISSING_COUNT 个缺少 Change-Id 的提交"
echo ""
# 步骤 3创建备份
BACKUP_BRANCH="backup-$(date +%Y%m%d-%H%M%S)"
echo "步骤 3: 创建备份分支: $BACKUP_BRANCH"
git branch "$BACKUP_BRANCH"
echo "✅ 备份完成"
echo ""
# 步骤 4为所有提交添加 Change-Id
echo "步骤 4: 为所有提交添加 Change-Id..."
echo "这可能需要一些时间,请耐心等待..."
echo ""
# 使用 git filter-branch 为所有提交添加 Change-Id
git filter-branch -f --msg-filter '
# 读取原始提交信息
cat
# 如果提交信息中没有 Change-Id添加一个
if ! grep -q "^Change-Id:"; then
# 生成 Change-Id基于提交的 SHA1
# 使用 git hash-object 生成一个唯一的 ID
COMMIT_INFO=$(git cat-file commit HEAD)
CHANGE_ID_BASE=$(echo -n "$COMMIT_INFO" | git hash-object --stdin)
CHANGE_ID="I${CHANGE_ID_BASE:0:40}"
echo ""
echo "Change-Id: $CHANGE_ID"
fi
' --tag-name-filter cat -- --branches --tags
if [ $? -eq 0 ]; then
echo ""
echo "✅ Change-Id 添加完成!"
echo ""
# 验证
echo "验证结果:"
REMAINING=$(git log --format='%H' | while read commit; do
if ! git log -1 --format='%B' "$commit" | grep -q "^Change-Id:"; then
echo "1"
fi
done | wc -l)
if [ "$REMAINING" -eq 0 ]; then
echo "✅ 所有提交都已包含 Change-Id"
else
echo "⚠️ 仍有 $REMAINING 个提交缺少 Change-Id"
fi
echo ""
echo "下一步:"
echo " git push gerrit HEAD:refs/for/master"
echo ""
echo "如果需要恢复,可以使用:"
echo " git reset --hard $BACKUP_BRANCH"
else
echo ""
echo "❌ 添加 Change-Id 失败"
echo "可以恢复备份git reset --hard $BACKUP_BRANCH"
exit 1
fi