欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本實現(xiàn)的基于SVN的代碼提交量統(tǒng)計工具

 更新時間:2015年06月29日 09:01:37   投稿:junjie  
這篇文章主要介紹了Shell腳本實現(xiàn)的基于SVN的代碼提交量統(tǒng)計工具,本文直接給出實現(xiàn)腳本代碼,需要的朋友可以參考下

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

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

#!/bin/bash -  
#"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
#     FILE: lines.sh 
#  
#     USAGE: ./lines.sh [dir] 
#     AUTHOR: william 
#  
#  DESCRIPTION: 基于SVN的代碼提交量統(tǒng)計工具 
#    OPTIONS: --- 
#    CREATED: 06/05/2012 12:49:20 PM CST 
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
 
set -o nounset               # Treat unset variables as an error 
 
 
# 關(guān)注的文件類型 后罪名 
FILES_TYPE="*.cpp *.h *.lua" 
 
# 需要統(tǒng)計的人員,在這里寫入需要統(tǒng)計的人,用空格隔開。哈還不智能 
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 "-----開始統(tǒng)計,請耐心等待.... :) " 
action $1 
total 
 
exit 0 

相關(guān)文章

  • shell實現(xiàn)貪吃蛇的示例代碼

    shell實現(xiàn)貪吃蛇的示例代碼

    本文主要介紹了shell實現(xiàn)貪吃蛇的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Linux輸出內(nèi)容到指定文件的解決方案

    Linux輸出內(nèi)容到指定文件的解決方案

    這篇文章主要介紹了Linux輸出內(nèi)容到指定文件的解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Linux命令行循環(huán)執(zhí)行shell命令

    Linux命令行循環(huán)執(zhí)行shell命令

    這篇文章主要介紹了Linux命令行,循環(huán)執(zhí)行shell命令的相關(guān)知識,主要包括死循環(huán),普通計數(shù)循環(huán),以及Linux shell循環(huán)命令 while死循環(huán)的用法,需要的朋友可以參考下
    2023-01-01
  • 一個簡單的防CC攻擊Shell腳本分享

    一個簡單的防CC攻擊Shell腳本分享

    這篇文章主要介紹了一個簡單的防CC攻擊Shell腳本分享,主要原理是分析apache或者nginx的訪問日志,對大量訪問的IP加入iptables進行禁止訪問,需要的朋友可以參考下
    2014-06-06
  • linux BASH shell下設(shè)置字體及背景顏色

    linux BASH shell下設(shè)置字體及背景顏色

    這篇文章主要介紹了linux BASH shell下設(shè)置字體及背景顏色的方法,需要的朋友可以參考下
    2014-04-04
  • 給定鏈表中間節(jié)點指針,刪除中間節(jié)點的方法

    給定鏈表中間節(jié)點指針,刪除中間節(jié)點的方法

    本文實現(xiàn)算法來刪除單鏈表中的中間節(jié)點,只知道指向該節(jié)點中間節(jié)點的指針,大家可以參考使用
    2013-11-11
  • git 刪除分支和回滾的實例詳解

    git 刪除分支和回滾的實例詳解

    這篇文章主要介紹了git 刪除分支和回滾的實例詳解的相關(guān)資料,希望通過本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Shell腳本解壓rpm軟件包

    Shell腳本解壓rpm軟件包

    這篇文章主要介紹了Shell腳本解壓rpm軟件包,用來解壓后提取某個包中文件,需要的朋友可以參考下
    2014-06-06
  • Linux監(jiān)控cpu以及內(nèi)存使用情況之top命令(詳解)

    Linux監(jiān)控cpu以及內(nèi)存使用情況之top命令(詳解)

    下面小編就為大家?guī)硪黄狶inux監(jiān)控cpu以及內(nèi)存使用情況之top命令(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • shell腳本轉(zhuǎn)發(fā)80端口數(shù)據(jù)包給Node.js服務(wù)器

    shell腳本轉(zhuǎn)發(fā)80端口數(shù)據(jù)包給Node.js服務(wù)器

    開發(fā)基于Node.js的WEB應(yīng)用很方便,但是服務(wù)端口問題很蛋疼,由于Linux內(nèi)核規(guī)定普通用戶只能使用大于1024的端口號,所以使用普通用戶運行Node.js服務(wù)就不能監(jiān)聽80端口
    2014-03-03

最新評論