软件教程

根据提交信息找出repo所有提交生成补丁和源文件

2017-11-24  本文已影响0人  小磊长江大

#!/bin/bash

MSG=$1

if[ 1-gt$#];then

echo"Usage ./find_commit.sh commit_msg"

exit1

fi

LOCAL_DIR=$(pwd)

COMMIT_DIR=$LOCAL_DIR/find_out_${MSG#*\#}

if[-d$COMMIT_DIR];then

rm -rf$COMMIT_DIR

fi

REPOS=$(repo forall -c pwd)

forpathin$REPOS

do

pushd$path>/dev/null

#echo "Searching commits that match "$MSG" in "${path#*$LOCAL_DIR}" ..."

COMMITS=($(git log --pretty=format:"%H"--grep=$MSG))

j=${#COMMITS[@]}

if[$j-gt0 ];then

leti=n=$j-1

k=0

echo-e"Found"$j"commit(s) in"${path#*$LOCAL_DIR\/}

COMMIT_OUT_PATCH=$COMMIT_DIR/patch

if[!-d$COMMIT_OUT_PATCH];then

mkdir -p$COMMIT_OUT_PATCH

fi

while[$i-ge0 ]

do

commit=${COMMITS[$i]}

COMMIT_OUT_SOURCE=$COMMIT_DIR/source_code/${path#*$LOCAL_DIR}/commit_$k

if[!-d$COMMIT_OUT_SOURCE];then

mkdir -p$COMMIT_OUT_SOURCE

fi

PATCH_NAME_TMP=${path#*$LOCAL_DIR/}

PATCH_NAME=${PATCH_NAME_TMP//\//_}_$k.patch

if[$i-eq$n];then

echo$PATCH_NAME_TMP:>>$COMMIT_DIR/commits.txt

fi

echo-e'\t'$commit>>$COMMIT_DIR/commits.txt

if[$k-eq$n];then

#echo -e '\n'

echo-e'\n'>>$COMMIT_DIR/commits.txt

fi

#echo "Generating "$[k+1]"th commit in "${path#*$LOCAL_DIR\/}

mv$(git format-patch -1$commit--no-commit-id)$COMMIT_OUT_PATCH/$PATCH_NAME

FILES=$(git diff-tree -r --no-commit-id --name-only$commit)

#echo "Copying source file in "${path#*$LOCAL_DIR\/}

forfilein$FILES

do

#echo "cp "${file#*$path}" "${COMMIT_OUT_SOURCE#*$LOCAL_DIR\/}

cp --parents$file$COMMIT_OUT_SOURCE

done

leti--

letk++

done

#else

#echo "No related commit found in "${path#*$LOCAL_DIR}" !"

fi

popd>/dev/null

done

if[-f$COMMIT_DIR/commits.txt ];then

echo-e"\n"

echo"All patch and source code generated in dictory"${COMMIT_DIR#*$LOCAL_DIR\/}

else

echo"No commit found that match commit_msg:"$MSG

fi

上一篇 下一篇

猜你喜欢

热点阅读