#!/bin/bash
echo "get cuurnt path"
basePath=$(cd $(dirname $0);pwd)
echo $basePath
cd $basePath
#GitLab服务器分支存储默认路径,如有变更请同步修改
GITDATA_PATH="/var/opt/gitlab/git-data/repositories"
# 清理旧过程文件
if [ ! -d "$basePath/temp" ]; then
mkdir -p $basePath/temp
else
rm -rf $basePath/temp/*
fi
# 清理旧报告
if [ ! -d "$basePath/report" ]; then
mkdir -p $basePath/report
else
rm -rf $basePath/report/*
fi
# 清空日志
if [ ! -d "$basePath/log" ]; then
mkdir -p $basePath/log
else
rm -rf $basePath/log/*
fi
# 定义记录日志函数
function logger(){
printf "%s\n" "$*" >> $basePath/log/StatisticsNum.log
}
# 添加表头信息
echo "群组名 代码库 代码量" >> $basePath/report/RESULT
echo "get contents and subdirectory path"
cd $GITDATA_PATH
# 1.遍历GitLab服务器全部可用群组
for file in $GITDATA_PATH/*
do
if test -f $file
then
echo "$file is a file"
else
echo $file
# 获取群组名称
GROUP_NAME=$( echo $file | awk -F "/" '{print $NF}' )
cd $file
# 2.遍历群组下的全部库
for sonfile in $file/*
do
if test -f $sonfile
then
echo "$sonfile is a file"
else
# 获取代码库名称
LIBRARY_NAME=$( echo $sonfile | awk -F "/" '{print $NF}' )
cd $sonfile
# 3.遍历不同库获取总代码量
git log --format='%aN' | \
sort -u | \
while read name; do echo -en "$name\t"; git log --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 | \
awk '{print $NF}' | \
awk '{sum += $1};END {print sum}' > $basePath/temp/CollectMetadata
# 获取代码库总代码行数
TOTAL_NUM=$( cat $basePath/temp/CollectMetadata | awk '{print $1}' )
# 判断并赋值最终结果报告
if [ ! -n "$TOTAL_NUM" ] ;then
TAG_WIKI=$( echo $LIBRARY_NAME | grep wiki | awk '{print $1}' )
if [ ! -n "$TAG_WIKI" ] ;then
echo "$LIBRARY_NAME 为空库!"
else
echo "$LIBRARY_NAME 为wiki配套!"
fi
else
echo "$GROUP_NAME $LIBRARY_NAME $TOTAL_NUM" >> $basePath/report/RESULT
fi
fi
done
fi
# 记录操作者日志
logger "Run by user " $(id -un) "at " $(/bin/date)
done
# 格式化展示最终统计分析数据
echo "-------------------------------- FORMAT SHOW DATA --------------------------------"
column -t $basePath/report/RESULT
echo "-------------------------------- FORMAT SHOW END ---------------------------------"
if [ $? -eq 0 ]; then
echo "successed."
else
echo "failed , please check this script ."
exit 1
fi