GitLab分代码库代码总量统计脚手架工具

#!/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿蜡客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值