shell脚本实现统计git上个人代码量
gerrit代码统计脚本
背景
- 自动创建git文件夹存放拉取项目及代码统计结果。
- 添加统计单一分支代码量功能。
- 可以只统计个人的单一/所有项目分支代码量。
实现
统计所有人单一/所有分支代码量
将开始时间、截止时间、被统计人gerrit名称从命令行作为参数输入,比如在Terminal中运行sudo ./git-test.sh 2022-2-01 2022-3-01 zjc命令。
若要统计所有人的代码量,则被统计人名称为“all”,即sudo ./git-test.sh 2022-2-01 2022-3-01 all
在出现的选取列表中输入每个分支前序号统计该分支代码量。若要统计所有分支代码量,则选择“all”。
统计完毕选择“quit”退出。
#!/bin/bash
# author:zjc
export start_time=$1
export end_time=$2
export author_name=$3
PS3="Select a branch or get all info: "
rm -rf ~/git/total-test3.txt
#分支名
array=("xxx")
# 先创建git文件夹用于存储统计文件
dir="/home/ubuntu/git"
if [ ! -d "$dir" ];then mkdir $dir; echo “创建git文件夹”; else echo "git文件夹已存在"; fi
echo "start time:"$1" end time:"$2>~/git/total-test3.txt
# 拉取项目,找到对应分支,计算代码量并写入文件
function gitStatisticsFunc(){
echo "#########################"${array[$i]}>>~/git/total-test3.txt
str=${array[$i]}
strs=($str)
echo ${array[$i]}
git clone http://IP:Port/${strs[0]} ~/git/${strs[0]}-${strs[1]}
sudo chmod 777 ~/git/${strs[0]}-${strs[1]}
cd ~/git/${strs[0]}-${strs[1]};
git checkout ${strs[1]};
git pull;
pwd |awk -F '/' '{print "["$NF"]:\t"}' >> ~/git/total-test3.txt;
if [ $author_name == "all" ]; then
git log --since=$start_time --before=$end_time --format='%aN' | sort -u| while read name; do echo -en "$name\t";
git log --since=$start_time --before=$end_time --author="$name" --pretty=tformat: --numstat | awk '{add+= $1; subs+= $2; loc+= $1-$2 } END {printf " added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc}';
done>>~/git/total-test3.txt;
else
echo -en "$author_name\t">>~/git/total-test.txt
git log --since=$start_time --before=$end_time --author="$author_name" --pretty=tformat: --numstat | awk '{add+= $1; subs+= $2; loc+= $1-$2 } END {printf " added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc}'>>~/git/total-test3.txt;
fi
}
# 统计完后删除拉取项目
function deleteGit(){
for((i=0;i<${#array[*]};i++))
do
str=${array[$i]}
strs=($str)
rm -rf ~/git/${strs[0]}-${strs[1]};
done
}
modules=("${array[@]}")
modules+=("all")
modules+=("quit")
select module in "${modules[@]}";do
case $module in
"quit")
echo "User requested exit"
deleteGit
exit
;;
*)
# 输入all则全部统计
if [ "$module" == "all" ]; then
for((i=0;i<${#array[*]};i++))
do
gitStatisticsFunc
done
else
# 输入对应项目及分支名则只统计对应项目分支
for((i=0;i<${#array[*]};i++))
do
if [ "$module" == "${array[$i]}" ]; then
gitStatisticsFunc
fi
done
fi
deleteGit
esac
done