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
我不知道我錯了哪裏。請求你的寶貴意見。
嗨魯迪,謝謝你的信息。我已經根據你的建議修改了腳本,下面是我收到的輸出,'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
@ Srikanth Argh,我剛纔看到你在'svnlook'命令周圍有反引號(\)。當用反引號括起shell腳本的一部分時,shell運行該命令,並將命令在stdout上編寫的文本填充到下一個要執行的命令中。這意味着提交消息將被解釋爲下一個命令,但是您希望將提交消息傳送到以下程序中。我刪除反引號,以便命令現在應該工作。 – Rudi 2011-03-01 09:09:03
嗨魯迪,非常感謝。它運行良好。現在我正在努力改進腳本以執行更多的提交檢查。 – Srikanth 2011-03-01 09:21:16