56 lines
1.4 KiB
Bash
56 lines
1.4 KiB
Bash
#!/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
|
||
}
|