git cherry-pick gerritID shell脚本解析

来源:互联网 发布:js把对象转成字符串 编辑:程序博客网 时间:2024/05/16 15:12

#!/bin/bash


while read line                                                                                                         //读取导入文件的每行到变量$line直到文件结尾
do
Name=`echo $line |awk '{print $2}'`                                                                    //awk 输出$line对应那行的第二列
ChangeID=`echo  $line |awk '{print $1}'`                                                            //awk 输出$line对应那行的第一列
pwd=$PWD
URL=`cat .repo/manifest.xml |grep ${Name}\" | cut -d '"' -f 4 `                        //找到manifestxml中包含$Name的用/分割后的第四部分,例如1/2/3/4   输出 4 ;/1/2/3/4   则为3
#echo $URL $ChangeID

echo "$Name $ChangeID $URL"

pushd $URL > /dev/null                                                                                                         //pushd 本身会输出LOG,“> /dev/null“会使LOG不输出,即相当于传到一个空文件中

Merge=`git log --grep="Change-Id: $ChangeID" --oneline |awk '{print $2}'|head -1`  //找到包含Change-Id: $ChangeID的第二列的第一个

if [ "$Merge" = "Merge" ];then

   commitID=`git log --grep=$ChangeID --oneline |awk '{print $1}'|head -2 |tail -1 `     //tail -1最后一行,其他同上
        if [ ${#commitID} = 0 ];then
                echo "this is the merge summit, No need to cherry pick "
        fi
else
   commitID=`git log --grep="Change-Id: $ChangeID" --oneline |awk '{print $1}'| head -1 `    //同上
fi


if [ ${#commitID} = 0 ] ; then

mChangeID=`echo $ChangeID | cut -c 2- `
changeID=`git log $mChangeID -1|grep Change-Id:|awk -F: '{print $2}'`
        if [ ! ${#changeID} = 0 ] ; then
        commitID=`git log --grep="$changeID"  --oneline | awk '{ print $1}'|head -1`
        fi
fi

echo "$Name $ChangeID $URL $commitID"
echo "----------------------"
echo "$commitID   $URL   changeID  $ChangeID" >> $pwd/cherry-pick.list-work
git cherry-pick -x $commitID                                                                                    //cherry pick 对应的git 提交
#echo "-------------- $URL $ChangeID---------------"
popd > /dev/null                                                                                                        //popd 本身会输出LOG,“> /dev/null“会使LOG不输出,即相当于传到一个空文件中

done <  $1                                                                                                         //导入文件对应while read line 每行分别传到变量$line直到文件结尾

原创粉丝点击