2011-03-01 48 views
1

我是Linux和Subversion的新手。我有一項任務來檢查提交消息的語法以包含PRODUCT ID。如果它不存在,我已經傳遞一條消息給使用SHELL SCRIPT的無效格式。
下面是我在谷歌, 很多搜​​索pre-commit鉤子的代碼是跟在後面的步驟:SVN的POST-COMMIT SCRIPT檢查使用shell腳本的PRODUCT-ID的提交日誌

#!/bin/sh 
set -e 
/PATH-TO-REPOSITORY/hooks/CommentSyntax.sh "$1" "$2" 

我CommentSyntax.sh腳本,

#!/bin/sh 
REPOS="$1" 
TXN="$2" 
SVNLOOK=/usr/bin/svnlook 
regex="PRODUCT-[0-9]*" 
if [ `"$SVNLOOK" log -t "$TXN" "$REPOS"` =~ ${regex} ]; then 
    exit 0 
else 
    echo "" 1>&2  
    echo "Please make your commit comment start with PRODUCT-XXX" 1>&2 
    exit 1 
fi 

每當我我試圖檢入代碼,得到下面的錯誤,我得到以下錯誤,

srikanth:~/testing$ svn ci -m "PRODUCT-123" 
Sending  two.java 
Transmitting file data .svn: Commit failed (details follow): 
svn: Commit blocked by pre-commit hook (exit code 1) with output: 
[: 22: PRODUCT-123: unexpected operator 

Please make your commit comment start with PRODUCT-XXX 

我不知道我錯了哪裏。請求你的寶貴意見。

回答

0

測試命令不知道=~運算符。 Relpace的

if [ `"$SVNLOOK" log -t "$TXN" "$REPOS"` =~ ${regex} ]; then 

線由

if "$SVNLOOK" log -t "$TXN" "$REPOS" | head -n1 | grep -q '^PRODUCT-[0-9][0-9]*' ; then 

head -n1選擇提交,grep檢查正則表達式的第一行。

+0

嗨魯迪,謝謝你的信息。我已經根據你的建議修改了腳本,下面是我收到的輸出,'srikanth:〜/ testing $ svn ci -m「PRODUCT-123」發送two.java傳輸文件數據.svn:提交失敗): svn:提交輸出結果被預提交鉤子(退出代碼1)阻止的提交:/ /hooks/checkCommentSyntax.sh:13:PRODUCT-123:未找到請將您的提交註釋以PRODUCT-XXX開頭 – Srikanth 2011-03-01 08:21:03

+0

@ Srikanth Argh,我剛纔看到你在'svnlook'命令周圍有反引號(\)。當用反引號括起shell腳本的一部分時,shell運行該命令,並將命令在stdout上編寫的文本填充到下一個要執行的命令中。這意味着提交消息將被解釋爲下一個命令,但是您希望將提交消息傳送到以下程序中。我刪除反引號,以便命令現在應該工作。 – Rudi 2011-03-01 09:09:03

+0

嗨魯迪,非常感謝。它運行良好。現在我正在努力改進腳本以執行更多的提交檢查。 – Srikanth 2011-03-01 09:21:16