最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 腳本中的 '-f' 和 '-d' 是什么意思

    shell 腳本中的 '-f' 和 '-d&apo

    本文講解如何使用'-f'和'-d'條件表達(dá)式來測試文件和目錄,在實際腳本中,這樣的條件判斷常用于根據(jù)不同的情況執(zhí)行不同的操作,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • linux find命令之xargs簡單概述

    linux find命令之xargs簡單概述

    這篇文章主要為大家詳細(xì)介紹了linux find命令之xargs的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • shell中對xargs命令傳參進(jìn)行編輯

    shell中對xargs命令傳參進(jìn)行編輯

    本文主要介紹了shell中對xargs命令傳參進(jìn)行編輯,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • shell處理用戶輸入傳遞參數(shù)的實現(xiàn)

    shell處理用戶輸入傳遞參數(shù)的實現(xiàn)

    本文主要介紹了shell處理用戶輸入傳遞參數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • linux find命令之exec簡單概述

    linux find命令之exec簡單概述

    這篇文章主要為大家詳細(xì)介紹了linux find命令之exec的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 一天一個shell命令 linux文本系列-file命令用法

    一天一個shell命令 linux文本系列-file命令用法

    這篇文章主要介紹了一天一個shell命令 linux文本系列-file命令用法,需要的朋友可以參考下
    2016-06-06
  • Shell腳本解壓rpm軟件包

    Shell腳本解壓rpm軟件包

    這篇文章主要介紹了Shell腳本解壓rpm軟件包,用來解壓后提取某個包中文件,需要的朋友可以參考下
    2014-06-06
  • Shell腳本查看網(wǎng)卡實時流量

    Shell腳本查看網(wǎng)卡實時流量

    這篇文章主要介紹了Shell腳本查看網(wǎng)卡實時流量,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12
  • shell 讀取變量腳本編程解析

    shell 讀取變量腳本編程解析

    這篇文章主要為大家介紹了shell 讀取變量腳本編程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • shell腳本操作mysql數(shù)據(jù)庫刪除重復(fù)的數(shù)據(jù)

    shell腳本操作mysql數(shù)據(jù)庫刪除重復(fù)的數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于shell腳本操作mysql數(shù)據(jù)庫刪除重復(fù)的數(shù)據(jù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論

枞阳县| 彰武县| 广州市| 清丰县| 日土县| 黄梅县| 合山市| 增城市| 通州市| 松潘县| 柏乡县| 托克托县| 丰原市| 华坪县| 定南县| 滦平县| 萍乡市| 鄂托克旗| 新乐市| 云浮市| 博客| 武汉市| 北海市| 甘德县| 绥芬河市| 广汉市| 南投县| 孙吴县| 宣城市| 安龙县| 兴海县| 子长县| 雅江县| 琼结县| 北安市| 清丰县| 淄博市| 石泉县| 彰化市| 平陆县| 循化|