鑒於組內有些人在提交代碼的時候並不寫注釋,而且沒有固定格式,所以准備給svn提交時增加強制注釋。
首先找到代碼庫里的hooks目錄,正常建svn庫的時候都有這個目錄。進入hooks目錄,找到pre-commit.tmpl,去掉tmpl,重命名為pre-commit。
這是一個shell腳本,如果是簡單的判斷注釋內容不能小於幾個字符,直接寫shell腳本就可以,但是現在我想讓開發按照固定格式提交代碼,
例如:
reason:電商
developer:du
reviewer:du
shell應該也是可以做到的,但是本人shell用的確實不怎么熟練,況且python寫起來更簡單,所以用了一種shell結合python的方式做hook。
首先上python腳本
check.py
#coding=utf-8 import sys inputstr = sys.argv[1] if inputstr=="": exit(1); lstr=inputstr.split("\n") if len(lstr)==3: if ('reason:' in lstr[0] and len(lstr[0])>len('reason:')) and ('developer:' in lstr[1] and len(lstr[1])>len('developer:')) and ('reviewer:' in lstr[2] and len(lstr[2])>len('reviewer:')): exit(0); else: exit(1); else: exit(1);
然后是pre-commit
#!/bin/sh SVN_BINDIR=/opt/subversion/bin/svnlook REPOS="$1" TXN="$2" LOGMSG=`$SVN_BINDIR log -t "$TXN" "$REPOS"` var=`python /opt/svndata/repos/hooks/check.py "${LOGMSG}"` result=$? if [ $result -gt 0 ] then echo -e "you must input comment like this:\r\nreason:\r\ndeveloper:\r\nreviewer:" 1>&2 exit 1 fi exit 0
這個pre-commit最好用vim來寫,不要windows里寫好再傳到linux服務器上,會報格式錯誤,其實1>&2,-e也要加,只有這兩個都加了,客戶端提交的時候才能看到錯誤信息。
shell里對變量的引用 $result 和"$result"都可以,但是不要用單引號。還有if [ $result -gt 0 ]這塊,空格一定要留出來,不然會報錯。
驗證一下,如下
無注釋提交

會提示

上面的錯誤是系統原因,無大礙。主要是中間紅框內的提示。我們可以看出增加強制注釋成功。
----------------
由此例可以看出,我們完全可以在此基礎上滿足其他需求,例如提交代碼發郵件,記日志入庫等功能。
