為svn新增hook指令碼

2021-07-10 03:23:51 字數 1265 閱讀 7049

為了維護svn的log,方便後續查詢某個模組的svn提交操作,今天終於動手寫了一次svn的hook指令碼。雖說功能不複雜,但是經歷還是有點波折。特此記錄

目標:輸入的注釋要遵照格式:[模組名]操作日誌,其中模組名不少於4個字元(或2個漢字),操作日誌不少於10個字元(或5個漢字)

由於公司的svnserver是在windows機器上,所以需要編輯pre-commit.bat

::/@echo off  

setlocal  

set repos=%1  

set txn=%2           

::svnlook log %repos% -t %txn% | awk "else}end"  1>&2

::rem 保證輸入8個字元

::svnlook log %repos% -t %txn% | findstr "........" > nul

::if %errorlevel% gtr 0 goto :err_action

rem  按照格式輸入

svnlook log %repos% -t %txn% | awk "else}end"  | grep -e "^\[..*\]..*" > nul

if %errorlevel% gtr 0 goto :err_action1

rem 過濾空格字元

svnlook log %repos% -t %txn% | findstr /ic:"        " > nul

if %errorlevel% gtr 0 goto :success

:::err_action

::echo 輸入的注釋不少於 8 個字元說明(或 4 個漢字) >&2

:err_action1

echo 輸入的注釋要遵照格式:[模組名]操作日誌,其中模組名不少於4個字元(或2個漢字),操作日誌不少於10個字元(或5個漢字) >&2

goto :err_exit

:err_exit

exit 1

:success

exit 0

::/走過的坑:

1.windows下的findstr對正規表示式的支援不夠全面,對於方括號的匹配始終沒有找到解決辦法,最後乾脆用linux下的工具來實現

2.找到windows版的grep和awk工具,放到系統盤的目錄有講究,32位系統的話放到c:\windows\system32下,64位系統需要放到c:\windows\syswow64,否則會報找不到命令的錯誤

3.svn的日誌是一行一行提交的,所以需要串成一行字串來做處理

svn加hook,要求必須注釋指令碼

bin sh repos 1 txn 2 svnlook usr bin svnlook 同pre commit.tmpl檔案中的svnlook logmsg svnlook log t txn repos grep a za z0 9 wc c if logmsg lt 2 then echo 提...

svn備份指令碼

svn備份一般採用三種方式 1 svnadmin dump 2 svnadmin hotcopy 3 svnsync.注意,svn備份不宜採用普通的檔案拷貝方式 除非你備份的時候將庫暫停 如copy命令 rsync命令。筆者曾經用 rsync命令來做增量和全量備份,在季度備份檢查審計中,發現備份出來...

SVN備份指令碼

bin bash maxdays 7 備份保留最大天數 time date y m d h m s svnpath data1 svn ser 定義倉庫repos路徑 bakdir data1 svnback 定義備份主目錄 baksubdir 定義全備路徑 baklog log 定義備份日誌 d ...