blob: 1081d75e79acdc864a1ec3913235c60e3da0f8da [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
Kelvin Zhang6305ae32022-09-06 17:55:51 +08008get_repo_path() {
9 for keyword in $keyline; do
10 if [[ $keyword == $pattern* ]]; then
11 repo_path=`echo ${keyword#*${pattern}} | sed 's/\"//g' | sed 's/\/>//g'`
12 break;
13 fi
14 done
15}
kelvin.zhang2219b412022-03-04 16:44:41 +080016
Kelvin Zhang6305ae32022-09-06 17:55:51 +080017cherry_pick() {
18 if [ -d "$repo_path" ]; then
19 pushd $repo_path > /dev/null
20 git fetch ssh://${GERRIT_SERVER}:${GERRIT_PORT}/${GERRIT_PROJECT} ${GERRIT_REFSPEC}
21 git cherry-pick FETCH_HEAD
22 if [ "$?" -ne 0 ]; then
23 git status
24 git log -1
25 echo -e "\nFailed to apply patch!\n"
26 exit 1
27 fi
28 popd > /dev/null
29 else
30 echo -e "\nNo such directory! $repo_path\n"
31 exit 1
32 fi
33}
34
35apply_patch_by_change_number() {
36 [ -z "$GERRIT_PORT" -o -z "$GERRIT_PROJECT" -o -z "$GERRIT_REFSPEC" ] && [ -z "$MANUAL_GERRIT_CHANGE_NUMBER" ] && return
37
38 if [ -n "$GERRIT_PORT" ] && [ -n "$GERRIT_PROJECT" ] && [ -n "$GERRIT_REFSPEC" ]; then
39 echo -e "\n======== Applying Gerrit change $GERRIT_CHANGE_NUMBER on Project $GERRIT_PROJECT ========"
40 elif [ -n "$MANUAL_GERRIT_CHANGE_NUMBER" ]; then
41 GERRIT_PORT="29418"
42 ssh -p $GERRIT_PORT $GERRIT_SERVER gerrit query --format=JSON --current-patch-set status:open change:$MANUAL_GERRIT_CHANGE_NUMBER > $GERRIT_QUERY_RESULT
43 GERRIT_PROJECT=$(jq -r '.project // empty' $GERRIT_QUERY_RESULT)
44 GERRIT_REFSPEC=$(jq -r '.currentPatchSet.ref // empty' $GERRIT_QUERY_RESULT)
45 echo -e "\n======== Applying manual change $MANUAL_GERRIT_CHANGE_NUMBER on Project $GERRIT_PROJECT ========"
46 fi
47
48 keyline=`grep "name=\"$GERRIT_PROJECT\"" $CURRENT_MANIFEST`
49 pattern="path="
50 get_repo_path
51
52 cherry_pick
53 echo -e "======== Done ========\n"
54}
55
56apply_patch_by_gerrit_topic() {
57 [ -z "$MANUAL_GERRIT_TOPIC" ] && return
58
59 GERRIT_PORT="29418"
60 ssh -p $GERRIT_PORT $GERRIT_SERVER gerrit query --format=JSON --current-patch-set status:open topic:$MANUAL_GERRIT_TOPIC > $GERRIT_QUERY_RESULT
61 GERRIT_PROJECTS=$(jq -r '.project // empty' $GERRIT_QUERY_RESULT)
62 GERRIT_REFSPECS=$(jq -r '.currentPatchSet.ref // empty' $GERRIT_QUERY_RESULT)
63
64 echo -e "\n======== Applying manual patches ========"
65
66 i=1
67 for GERRIT_PROJECT in $GERRIT_PROJECTS; do
68 echo "-------- Applying manual patch $i on Project $GERRIT_PROJECT --------"
69 keyline=`grep "name=\"$GERRIT_PROJECT\"" $CURRENT_MANIFEST`
70 pattern="path="
71 get_repo_path
72
73 GERRIT_REFSPEC=$(echo $GERRIT_REFSPECS | awk "{print \$$i}")
74 cherry_pick
75 echo -e "-------- Done --------\n"
76 i=$((i+1))
77 done
78
79 i=$((i-1))
80 [[ "$i" -eq 1 ]] && echo -e "\n======== Applied $i patch for $MANUAL_GERRIT_TOPIC ========\n"
81 [[ "$i" -gt 1 ]] && echo -e "\n======== Applied $i patches for $MANUAL_GERRIT_TOPIC ========\n"
82}
83
84apply_patch_by_gerrit_url() {
85 [ -z "$GIT_CHERRY_PICK" ] && return
86
Kelvin Zhangb2630702022-04-20 11:22:32 +080087 while IFS= read -r line
kelvin.zhang2219b412022-03-04 16:44:41 +080088 do
89 pattern=":29418/"
90 for keyword in $line; do
91 if [[ $keyword == *$pattern* ]]; then
92 GIT_PROJECT=`echo ${keyword#*${pattern}} | sed 's/\"//g' | sed 's/\/>//g'`
93 break;
94 fi
95 done
96
Kelvin Zhangb6cbb072022-04-26 14:19:35 +080097 echo -e "\n-------- Applying manual patch on Project $GIT_PROJECT --------"
Kelvin Zhang4982b0b2022-08-31 19:15:24 +080098 keyline=`grep "name=\"$GIT_PROJECT\"" $CURRENT_MANIFEST`
Kelvin Zhang6305ae32022-09-06 17:55:51 +080099 pattern="path="
100 get_repo_path
kelvin.zhang2219b412022-03-04 16:44:41 +0800101
102 if [ -d "$repo_path" ]; then
103 pushd $repo_path > /dev/null
104 cmd=`echo $line | sed -e 's/ssh:\/\/.*@scgit.amlogic.com/ssh:\/\/scgit.amlogic.com/'`
105 eval $cmd
106 if [ "$?" -ne 0 ]; then
Kelvin Zhangcceacda2022-05-23 09:34:34 +0800107 git status
108 git log -1
109 echo -e "-------- Failed to apply patch! --------"
kelvin.zhang2219b412022-03-04 16:44:41 +0800110 exit 1
111 fi
112 popd > /dev/null
113 else
114 echo "No such directory! $repo_path"
115 exit 1
116 fi
Kelvin Zhangb6cbb072022-04-26 14:19:35 +0800117 echo -e "-------- Done --------\n"
Kelvin Zhangb2630702022-04-20 11:22:32 +0800118 done <<< "$GIT_CHERRY_PICK"
Kelvin Zhang6305ae32022-09-06 17:55:51 +0800119}
Kelvin Zhang0322c7e2022-04-25 18:19:41 +0800120
Kelvin Zhang6305ae32022-09-06 17:55:51 +0800121[ -z "$CURRENT_MANIFEST" ] && CURRENT_MANIFEST="curr_manifest.xml"
122[ ! -f $CURRENT_MANIFEST ] && repo manifest -r -o $CURRENT_MANIFEST
Kelvin Zhang0322c7e2022-04-25 18:19:41 +0800123
Kelvin Zhang6305ae32022-09-06 17:55:51 +0800124GERRIT_SERVER="scgit.amlogic.com"
125GERRIT_QUERY_RESULT="changes.txt"
Kelvin Zhang0322c7e2022-04-25 18:19:41 +0800126
Kelvin Zhang6305ae32022-09-06 17:55:51 +0800127apply_patch_by_change_number
128apply_patch_by_gerrit_topic