Files
2026-08-24 10:03:24 +08:00

104 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
#
# SPDX-License-Identifier: MIT
#
get_repo_path() {
repo_path=""
for keyword in $keyline; do
if [[ $keyword == $pattern* ]]; then
repo_path=`echo ${keyword#*${pattern}} | sed 's/\"//g'`
break;
fi
done
}
get_repo_branch() {
repo_branch=""
for keyword in $keyline; do
if [[ $keyword == $pattern* ]]; then
repo_branch=`echo ${keyword#*dest-branch=} | sed -n 's/.*"\([^"]*\)".*/\1/p'` && break
fi
done
}
cherry_pick() {
if [ -d "$repo_path" ]; then
pushd $repo_path > /dev/null
if [ "$repo_branch" != "$GERRIT_BRANCH" ]; then
echo "The branch of ${GERRIT_REFSPEC} mismatch: $GERRIT_BRANCH != ${repo_branch}"
popd > /dev/null
return 1
fi
git fetch ssh://${GERRIT_SERVER}:${GERRIT_PORT}/${GERRIT_PROJECT} ${GERRIT_REFSPEC}
git cherry-pick FETCH_HEAD
if [ "$?" -ne 0 ]; then
git status
git log -1
echo -e "\n${FUNCNAME[0]}: Failed to apply patch!\n"
popd > /dev/null
return 2
else
popd > /dev/null
return 0
fi
else
echo -e "\n${FUNCNAME[0]}: No such directory! $repo_path\n"
return 2
fi
}
apply_patch_by_gerrit_topic() {
ssh -p $GERRIT_PORT $GERRIT_SERVER gerrit query --format=JSON --current-patch-set status:open topic:{$MANUAL_GERRIT_TOPIC} > "$GERRIT_QUERY_RESULT"
echo -e "======== Applying Gerrit Topic: $MANUAL_GERRIT_TOPIC ========"
patch_apply_count=0
changed_repositories=""
change_lines=$(grep -v '"type":"stats"' "$GERRIT_QUERY_RESULT")
numbers=$(echo "$change_lines" | jq -r '.number')
echo $numbers
change_lines=$(grep -v '"type":"stats"' "$GERRIT_QUERY_RESULT")
sorted_numbers=$(echo "$change_lines" | jq -r '.number' | sort -n)
echo $sorted_numbers
for GERRIT_CHANGE_NUMBER in $sorted_numbers; do
change=$(grep "\"number\":\"$GERRIT_CHANGE_NUMBER\"" "$GERRIT_QUERY_RESULT")
GERRIT_PROJECT=$(jq -r '.project' <<< "$change")
GERRIT_REFSPEC=$(jq -r '.currentPatchSet.ref' <<< "$change")
GERRIT_BRANCH=$(jq -r '.branch' <<< "$change")
keyline=$(grep "name=\"$GERRIT_PROJECT\"" "$MANIFEST")
if [ -z "$keyline" ]; then
echo "${GERRIT_REFSPEC} does not belong to ${PROJECT_NAME}, skip!"
continue
fi
pattern="path="
get_repo_path
pattern="dest-branch="
get_repo_branch
cherry_pick
patch_status=$?
if [ "$patch_status" -eq 1 ]; then
continue
elif [ "$patch_status" -eq 0 ]; then
patch_apply_count=$((patch_apply_count + 1))
changed_repositories="$GERRIT_PROJECT#$changed_repositories"
else
# apply patch failed
return 255
fi
done
echo -e "======== Applied $patch_apply_count patch(es) for $MANUAL_GERRIT_TOPIC ========\n"
return $patch_apply_count
}