coze-studio/frontend/scripts/block-unresolved-conflict.sh

56 lines
1.4 KiB
Bash
Raw 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.

#!/usr/bash
block_unresolved_conflict() {
set -e
[ "$CI" = "true" ] && set -x
# git冲突标记符一般为7个字符
local match="<<<<<<<|=======|>>>>>>>"
local diff_params="$1 --name-status -G $match"
local count=0
if [[ $1 == *..* ]]; then
# 检查分支是否存在,可以解决 merge 之后 feature 分支被 removed ,导致 git 报错的问题。
sourceBranch=${1%%..*}
targetBranch=${1#*..}
if ! git branch -a | grep -qE "$sourceBranch"; then
echo "branch do not exist: $sourceBranch"
return 0
fi
if ! git branch -a | grep -qE "$targetBranch"; then
echo "branch do not exist: $targetBranch"
return 0
fi
fi
# Specify the pattern you want to exclude
EXCLUDE_PATTERNS=(
'frontend/scripts/block-unresolved-conflict.sh'
'frontend/packages/arch/bot-api/src/auto-generate/**'
'frontend/packages/arch/idl/src/**'
'common/git-hooks/**'
)
for pattern in "${EXCLUDE_PATTERNS[@]}"; do
exclude_string+=":(exclude)$pattern "
done
diff_params+=" $exclude_string"
# 只检测修改的文件
conflicts=$(git diff $diff_params | grep '^M' | cut -f 2-)
if [[ -n "$conflicts" ]]; then
for conflict in $conflicts; do
if grep -Eq $match $conflict; then
echo $conflict
((count++))
fi
done
if [[ $count -ne 0 ]]; then
echo "Unresolved merge conflicts in these files, please check"
exit 1
fi
fi
return 0
}