You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
55 lines
1.5 KiB
#!/usr/bash
|
|
|
|
block_unresolved_conflict() {
|
|
set -e
|
|
[ "$CI" = "true" ] && set -x
|
|
# Git conflict marker, typically 7 characters
|
|
local match="<<<<<<<|=======|>>>>>>>"
|
|
local diff_params="$1 --name-status -G $match"
|
|
local count=0
|
|
|
|
if [[ $1 == *..* ]]; then
|
|
# Checking whether the branch exists can solve the problem that the feature branch is removed after the merge, resulting in an error in 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"
|
|
|
|
# Only detect modified files
|
|
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
|
|
}
|
|
|