日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 代码统计工具,Shell脚本实现的基于SVN的代码提交量统计工具

發布時間:2024/9/30 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 代码统计工具,Shell脚本实现的基于SVN的代码提交量统计工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近沒啥事,就用bash寫了一個基于svn的代碼統計小工具。 可以指定統計的目錄,默認遞歸統計子目錄。

目前還沒有屏蔽指定目錄的功能。哈 代碼比較粗糙。不過先曬出來。

#!/bin/bash -

#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

# FILE: lines.sh

#

# USAGE: ./lines.sh [dir]

# AUTHOR: william

#

# DESCRIPTION: 基于SVN的代碼提交量統計工具

# OPTIONS: ---

# CREATED: 06/05/2012 12:49:20 PM CST

#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

set -o nounset # Treat unset variables as an error

# 關注的文件類型 后罪名

FILES_TYPE="*.cpp *.h *.lua"

# 需要統計的人員,在這里寫入需要統計的人,用空格隔開。哈還不智能

declare -r CODER_LIST="coder1 coder2"

declare -i coder1

declare -i coder2

declare -r USAGE="Usage: $0 [dir]. default dir is current dir.\n"

# ERROR CODES;

declare -r E_BAD_PATH=1

declare -r E_INVAILED_ARGU=2

declare -r E_NOT_SVN_DIR=3

#TODO 屏蔽一些dir 還沒寫哈

# TODO other way get path not with / end

getpath()

{

#debug

#echo dir_name: ${dir_name}

#echo base_name: ${base_name}

if [ $dir_name == "/" ] || [ $base_name == "/" ]; then

work_path="/"

else

work_path=${dir_name}/${base_name}

fi

}

statistic_codelines()

{

if [ -z "$1" ]; then

echo "ERROR statistic_codelines not argument"

return

fi

local pwd_length=${#PWD}

echo "--------------------------"

echo "${PWD}"

for coder in $CODER_LIST; do

local num=$(echo "$1" | grep ${coder} | wc -l)

(( ${coder} += num ))

if [ $num -ne 0 ]; then

printf "%10s | %-7d\n" ${coder} $num

fi

done

echo "--------------------------"

}

# init check argument set work_path

init_work_path()

{

if [ $# -eq 1 ]; then

if [ $1 == "-h" ]; then # is help

echo -e "$USAGE"

elif [ -d $1 ]; then

dir_name=$(dirname ${1})

base_name=$(basename ${1})

getpath;

else

echo -e "An invailed argument"

echo -e "Use -h get help."

exit $E_INVAILED_ARGU

fi

fi

}

# check work_path

check_work_path()

{

if [ -z $work_path ] || [ ! -d $work_path ]; then

exit $E_BADPATH;

fi

}

# enter work_path

enter_work_path()

{

cd ${work_path}

if [ ! $? ]; then

echo "Can not enter ${work_path} "

fi

}

# check work_pat is a svn dir

is_svn_dir()

{

(

# check if current dir is asvn dir

svn info &> /dev/null

exit $?

)

return $?

}

action()

{

local dir_name=.

local base_name=

local work_path=$dir_name

init_work_path $1

check_work_path

enter_work_path #todo can't enter

#echo "NOW DIR: $PWD, OLD DIR $OLDPWD"

is_svn_dir

#todo to next dir

local ret=$?

if [ $ret -ne 0 ]

then

echo -e "Current dir \"${work_path}\" not a svn dir."

exit $E_NOT_SVN_DIR

fi

# get source files

local files=$(ls ${FILES_TYPE} 2> /dev/null)

if [ -n "$files" ]; then

local namelist=$(echo -n ${files} | xargs -n 1 svn blame | awk '{print $2}')

#svn blame $files #| grep $1 | wc -l

statistic_codelines "$namelist"

fi

local sub_dirs=$(find -maxdepth 1 -type d -name "[^.]*" 2>/dev/null)

if [ -n "$sub_dirs" ]; then

for dir in $sub_dirs ; do

action "$dir"

done

fi

cd ..

}

total()

{

echo "-------- TOTOAL ----------"

echo " NAME | lines "

echo "--------------------------"

for coder in $CODER_LIST; do

if [ ${!coder} -ne 0 ]; then

printf "%10s | %-7d\n" ${coder} ${!coder}

fi

done

echo "--------------------------"

}

# main

echo "-----開始統計,請耐心等待.... :) "

action $1

total

exit 0

總結

以上是生活随笔為你收集整理的linux 代码统计工具,Shell脚本实现的基于SVN的代码提交量统计工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。