功能:repo管理多个git仓库时,通过该脚本将原代码文件和修改后的代码文件,按照目录结构打包,他人可通过文本比对工具查看代码改动情况
#!bin/bash
PWD_PATH=`pwd`
DSTDIR_NEW="$PWD_PATH/$1/new"
DSTDIR_OLD="$PWD_PATH/$1/old"
STATUS=0
GITPATH=
function call_m()
{
if [ $STATUS -eq 0 ];then
#STATUS状态为1表示开始对一个git project进行处理
STATUS=1;
cd $GITPATH;
echo ">>>>>>>>>>>>>>>>>>>>> enter git project: $1 $STATUS"
fi
srcPath=$1
dstPath=
charToSearch='/';
GITPATH2=
let pos=`echo "srcPath" | awk -F ''$charToSearch'' '{printf "%d", length($0)-length($NF)}'`
#echo "char $charToSearch lastpos is: $pos"
if [ $pos != 0 ];then
GITPATH2=${srcPath:0:$pos-1}
echo $GITPATH2
fi
echo ---------copy opt---------- $1 $2
#echo pwd_path:`pwd`
#echo srcPath_len:${#srcPath}
if [ $2 != "del" ];then
dstPath="$DSTDIR_NEW/$GITPATH/$GITPATH2"
mkdir -p ${dstPath}
cp ${srcPath} ${dstPath}
fi
if [ $2 != "new" ];then
git stash;
dstPath="$DSTDIR_OLD/$GITPATH/$GITPATH2"
mkdir -p ${dstPath}
cp ${srcPath} ${dstPath}
git stash pop stash@{0}
fi
}
function call_project()
{
if [ $STATUS -eq 1 ];then
cd $PWD_PATH;
#STATUS状态为0表示完成一个git project的处理
STATUS=0
echo "<<<<<<<<<<<<<<<<<<<<< leave git project: $1 $STATUS"
fi
GITPATH="$1"
}
function code_cmp()
{
#去掉文本中的彩色信息
repo status | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" | sed "s/\x0f//g" > 1.txt
while read myline
do
echo $myline;
b=(${myline});
#跳过指定的git project目录
#echo -------/${b[0]}:${b[1]}
#if [ ${b[1]} == "platform/vc0718p/uboot/" ];then
# continue;
#fi
#每个字段打印
#echo ${b[0]} ${b[1]} ${b[2]}
#每个字段的长度
#echo ${#b[0]} ${#b[1]} ${#b[2]}
if [ ${b[0]} == "-m" ];then
call_m ${b[1]} "mod"
elif [ ${b[0]} == "--" ];then
call_m ${b[1]} "new"
elif [ ${b[0]} == "-d" ];then
call_m ${b[1]} "del"
elif [ ${b[0]} == "M-" ];then
call_m ${b[1]} "M"
elif [ ${b[0]} == "project" ];then
call_project ${b[1]}
fi
done < 1.txt
cd $PWD_PATH
rm 1.txt
}
echo "dhy : $# $0 $1"
if [ $# == 1 ] ; then
echo " e.g.: $0 code_cmp_copy"
code_cmp
else
echo "
usage:
./pack_diffFile.sh code_0909
"
fi