[svn hooks]識別指定目錄svn更新鈎子


最近項目開發越發膨大,需要提交觸發更新的目錄越來越多,由於svn的鈎子post-commit是針對只要svn庫有提交更新,就會觸發執行,
以導致有時候提交svn的時候,要等個幾秒鍾的卡頓,等待svn的鈎子更新,有時候還需要跨服器執行腳本,以上種種情況下來,svn就變得更加的龜速了。
針對這種坑爹事情,想出個方案,在提交的時候,針對性的檢查指定目錄是否有提交更新,
有調整的話才做進一步svn update的操作,避免執行的延時
思路很簡單...
core code 奉上

## update path list
## 需要掛鈎子的目錄,把路徑寫入${SVN_LIST}變量里,以;分割即可
PROJECT_SCRIPTS=/data/workspace/scripts
PROJECT_SERVER_PATH=/data/workspace/server
PROJECT_CLIENT_PATH=/data/workspace/client
PROJECT_TOOLS_DEV_PATH=/data/workspace/tools/dev

## 需要刷新的路徑列表
SVN_LIST="${PROJECT_SCRIPTS};${PROJECT_SERVER_PATH};${PROJECT_CLIENT_PATH};${PROJECT_TOOLS_DEV_PATH}"

## svn update handle
UPDATE_LIST=`echo ${SVN_LIST} | sed "s/;/ /g"`
INIT_PATH=$(cd "$(dirname "$0")";pwd)
# 構建versions 目錄,沒有就新建一個
VERSIONS_PATH=${INIT_PATH}/versions
mkdir -p ${VERSIONS_PATH}

for each in ${UPDATE_LIST}
do
    if [ -d ${each} ]; then
        get_ver=$(svn log ${each} -r head:1 -l 1 | grep "r" | awk -F ' ' '{print $1}')
        cd ${INIT_PATH}
        ## 用目錄生成md5值,當做文件名,保證映射
        md5file=`echo -n ${each}|md5sum|cut -d ' ' -f1`   
        check_file="${VERSIONS_PATH}/${md5file}"
        if [ ! -f ${check_file} ]; then
            echo "" > ${check_file}
        fi
	echo "path: ${each}"
	echo "get version is ${get_ver}"
        check_ver=`cat ${check_file}`
	echo "check veriosn is ${check_ver}"
        if [ "${get_ver}" != "${check_ver}" ]; then
            #echo "${each} 版本好不相等 ==${get_ver}==${check_ver}=="
            /usr/bin/svn update --username sysadmin --password `cat /data/save/svn_sysadmin_pwd` ${each}
            echo ${get_ver} > ${check_file}
        fi
    fi
done

end. enjoy it! LOL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM