blob: 08dcf301e9302e27bf2a3505e15281554eee6693 [file] [log] [blame]
kelvin.zhang2219b412022-03-04 16:44:41 +08001#!/bin/bash
2#
3# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
4#
5# SPDX-License-Identifier: MIT
6#
7
xiaohu.huang65e6c382024-12-03 10:33:59 +08008changed_repositories=""
9
Kelvin Zhang6305ae32022-09-06 17:55:51 +080010get_repo_path() {
11 for keyword in $keyline; do
12 if [[ $keyword == $pattern* ]]; then
Kelvin Zhang09aa4b62022-09-19 18:13:56 +080013 repo_path=`echo ${keyword#*${pattern}} | sed 's/\"//g'`
Kelvin Zhang6305ae32022-09-06 17:55:51 +080014 break;
15 fi
16 done
17}
kelvin.zhang2219b412022-03-04 16:44:41 +080018
Kelvin Zhang6305ae32022-09-06 17:55:51 +080019cherry_pick() {
20 if [ -d "$repo_path" ]; then
21 pushd $repo_path > /dev/null
22 git fetch ssh://${GERRIT_SERVER}:${GERRIT_PORT}/${GERRIT_PROJECT} ${GERRIT_REFSPEC}
23 git cherry-pick FETCH_HEAD
24 if [ "$?" -ne 0 ]; then
25 git status
26 git log -1
Kelvin Zhangcf643422022-11-22 15:28:31 +080027 echo -e "\n${FUNCNAME[0]}: Failed to apply patch!\n"
Kelvin Zhang461d2e12022-11-21 20:51:42 +080028 return 1
Kelvin Zhang6305ae32022-09-06 17:55:51 +080029 fi
30 popd > /dev/null
31 else
Kelvin Zhangcf643422022-11-22 15:28:31 +080032 echo -e "\n${FUNCNAME[0]}: No such directory! $repo_path\n"
Kelvin Zhang461d2e12022-11-21 20:51:42 +080033 return 1
Kelvin Zhang6305ae32022-09-06 17:55:51 +080034 fi
35}
36
37apply_patch_by_change_number() {
Kelvin Zhang3664eec2022-09-07 11:04:32 +080038 [ -z "$GERRIT_CHANGE_NUMBER" -o -z "$GERRIT_PROJECT" -o -z "$GERRIT_REFSPEC" ] && [ -z "$MANUAL_GERRIT_CHANGE_NUMBER" ] && return
Kelvin Zhang6305ae32022-09-06 17:55:51 +080039
Kelvin Zhang3664eec2022-09-07 11:04:32 +080040 if [ -n "$GERRIT_CHANGE_NUMBER" ] && [ -n "$GERRIT_PROJECT" ] && [ -n "$GERRIT_REFSPEC" ]; then
Kelvin Zhangbfe35d52022-09-08 10:35:34 +080041 echo -e "======== Auto-applying Gerrit change $GERRIT_CHANGE_NUMBER on Project $GERRIT_PROJECT ========"
Kelvin Zhang6305ae32022-09-06 17:55:51 +080042 elif [ -n "$MANUAL_GERRIT_CHANGE_NUMBER" ]; then
Kelvin Zhang6305ae32022-09-06 17:55:51 +080043 ssh -p $GERRIT_PORT $GERRIT_SERVER gerrit query --format=JSON --current-patch-set status:open change:$MANUAL_GERRIT_CHANGE_NUMBER > $GERRIT_QUERY_RESULT
44 GERRIT_PROJECT=$(jq -r '.project // empty' $GERRIT_QUERY_RESULT)
45 GERRIT_REFSPEC=$(jq -r '.currentPatchSet.ref // empty' $GERRIT_QUERY_RESULT)
Kelvin Zhangbfe35d52022-09-08 10:35:34 +080046 echo -e "======== Manually applying Gerrit change $MANUAL_GERRIT_CHANGE_NUMBER on Project $GERRIT_PROJECT ========"
Kelvin Zhang6305ae32022-09-06 17:55:51 +080047 fi
48
Kelvin Zhangfdf8ff02023-04-21 21:23:30 +080049 keyline=`grep "name=\"$GERRIT_PROJECT\"" $MANIFEST`
Kelvin Zhang6305ae32022-09-06 17:55:51 +080050 pattern="path="
51 get_repo_path
xiaohu.huang65e6c382024-12-03 10:33:59 +080052 changed_repositories="$GERRIT_PROJECT"
Kelvin Zhang6305ae32022-09-06 17:55:51 +080053
54 cherry_pick
Kelvin Zhang461d2e12022-11-21 20:51:42 +080055 [ "$?" -ne 0 ] && return 1
Kelvin Zhang3664eec2022-09-07 11:04:32 +080056 echo -e "======== Done ========\n"
Kelvin Zhang6305ae32022-09-06 17:55:51 +080057}
58
59apply_patch_by_gerrit_topic() {
Kelvin Zhange8015cf2023-01-17 15:49:29 +080060 [ -z "$MANUAL_GERRIT_TOPIC" ] && return 0
Kelvin Zhang6305ae32022-09-06 17:55:51 +080061
Kelvin Zhang6305ae32022-09-06 17:55:51 +080062 ssh -p $GERRIT_PORT $GERRIT_SERVER gerrit query --format=JSON --current-patch-set status:open topic:$MANUAL_GERRIT_TOPIC > $GERRIT_QUERY_RESULT
63 GERRIT_PROJECTS=$(jq -r '.project // empty' $GERRIT_QUERY_RESULT)
64 GERRIT_REFSPECS=$(jq -r '.currentPatchSet.ref // empty' $GERRIT_QUERY_RESULT)
65
Kelvin Zhang31490012022-11-01 11:17:58 +080066 echo -e "======== Manually applying Gerrit Topic: $MANUAL_GERRIT_TOPIC ========"
Kelvin Zhang6305ae32022-09-06 17:55:51 +080067
68 i=1
xiaohu.huang65e6c382024-12-03 10:33:59 +080069 changed_repositories=""
Kelvin Zhang6305ae32022-09-06 17:55:51 +080070 for GERRIT_PROJECT in $GERRIT_PROJECTS; do
Kelvin Zhang330cace2022-09-07 11:49:57 +080071 echo "-------- Applying patch $i on Project $GERRIT_PROJECT --------"
xiaohu.huang65e6c382024-12-03 10:33:59 +080072 changed_repositories="$GERRIT_PROJECT#$changed_repositories"
Kelvin Zhangfdf8ff02023-04-21 21:23:30 +080073 keyline=`grep "name=\"$GERRIT_PROJECT\"" $MANIFEST`
Kelvin Zhang6305ae32022-09-06 17:55:51 +080074 pattern="path="
75 get_repo_path
76
77 GERRIT_REFSPEC=$(echo $GERRIT_REFSPECS | awk "{print \$$i}")
78 cherry_pick
Kelvin Zhang461d2e12022-11-21 20:51:42 +080079 [ "$?" -ne 0 ] && return 1
Kelvin Zhang6305ae32022-09-06 17:55:51 +080080 echo -e "-------- Done --------\n"
81 i=$((i+1))
82 done
83
84 i=$((i-1))
Kelvin Zhang330cace2022-09-07 11:49:57 +080085 [[ "$i" -eq 1 ]] && echo -e "======== Applied $i patch for $MANUAL_GERRIT_TOPIC ========\n"
86 [[ "$i" -gt 1 ]] && echo -e "======== Applied $i patches for $MANUAL_GERRIT_TOPIC ========\n"
Kelvin Zhange8015cf2023-01-17 15:49:29 +080087
88 return 0
Kelvin Zhang6305ae32022-09-06 17:55:51 +080089}
90
91apply_patch_by_gerrit_url() {
92 [ -z "$GIT_CHERRY_PICK" ] && return
93
Kelvin Zhangb2630702022-04-20 11:22:32 +080094 while IFS= read -r line
kelvin.zhang2219b412022-03-04 16:44:41 +080095 do
96 pattern=":29418/"
97 for keyword in $line; do
98 if [[ $keyword == *$pattern* ]]; then
99 GIT_PROJECT=`echo ${keyword#*${pattern}} | sed 's/\"//g' | sed 's/\/>//g'`
100 break;
101 fi
102 done
103
Kelvin Zhang330cace2022-09-07 11:49:57 +0800104 echo -e "\n-------- Manually applying patch on Project $GIT_PROJECT --------"
Kelvin Zhangfdf8ff02023-04-21 21:23:30 +0800105 keyline=`grep "name=\"$GIT_PROJECT\"" $MANIFEST`
Kelvin Zhang6305ae32022-09-06 17:55:51 +0800106 pattern="path="
107 get_repo_path
kelvin.zhang2219b412022-03-04 16:44:41 +0800108
109 if [ -d "$repo_path" ]; then
110 pushd $repo_path > /dev/null
111 cmd=`echo $line | sed -e 's/ssh:\/\/.*@scgit.amlogic.com/ssh:\/\/scgit.amlogic.com/'`
112 eval $cmd
113 if [ "$?" -ne 0 ]; then
Kelvin Zhangcceacda2022-05-23 09:34:34 +0800114 git status
115 git log -1
Kelvin Zhangcf643422022-11-22 15:28:31 +0800116 echo -e "\n${FUNCNAME[0]}: Failed to apply patch!\n"
kelvin.zhang2219b412022-03-04 16:44:41 +0800117 exit 1
118 fi
119 popd > /dev/null
120 else
Kelvin Zhangcf643422022-11-22 15:28:31 +0800121 echo -e "\n${FUNCNAME[0]}: No such directory! $repo_path\n"
kelvin.zhang2219b412022-03-04 16:44:41 +0800122 exit 1
123 fi
Kelvin Zhangb6cbb072022-04-26 14:19:35 +0800124 echo -e "-------- Done --------\n"
Kelvin Zhangb2630702022-04-20 11:22:32 +0800125 done <<< "$GIT_CHERRY_PICK"
Kelvin Zhang6305ae32022-09-06 17:55:51 +0800126}
Kelvin Zhang0322c7e2022-04-25 18:19:41 +0800127
Kelvin Zhang7052f1c2022-09-20 11:11:41 +0800128[ -z "$OUTPUT_DIR" ] && OUTPUT_DIR=$PWD/output
129[ ! -d $OUTPUT_DIR ] && mkdir -p $OUTPUT_DIR
130
Kelvin Zhangfdf8ff02023-04-21 21:23:30 +0800131[ -z "$MANIFEST" ] && MANIFEST="$OUTPUT_DIR/manifest.xml"
132[ ! -f $MANIFEST ] && repo manifest -r -o $MANIFEST
Kelvin Zhang0322c7e2022-04-25 18:19:41 +0800133
Kelvin Zhang461d2e12022-11-21 20:51:42 +0800134[ -z "$GERRIT_SERVER" ] && GERRIT_SERVER="scgit.amlogic.com"
Kelvin Zhang3664eec2022-09-07 11:04:32 +0800135[ -z "$GERRIT_PORT" ] && GERRIT_PORT="29418"
Kelvin Zhang461d2e12022-11-21 20:51:42 +0800136[ -z "$GERRIT_QUERY_RESULT" ] && GERRIT_QUERY_RESULT="$OUTPUT_DIR/topic_changes.txt"
Kelvin Zhang0322c7e2022-04-25 18:19:41 +0800137
Kelvin Zhang6305ae32022-09-06 17:55:51 +0800138apply_patch_by_change_number
139apply_patch_by_gerrit_topic