![](/img/trans.png)
[英]How to restrict directory creation to trunk, tags, branches with a pre-commit hook in SVN?
[英]SVN pre-commit hook logic
我在我的svn預提交鈎子中添加一個邏輯來檢查提交消息中是否存在QA(大寫以空格開頭)然后提交應該失敗。 但它不起作用。 請幫助我如何正確地寫它。
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS")
# check if any comment has supplied by the commiter
if [ -z "$LOGMSG" ]; then
echo "Your commit was blocked because it have no comments." 1>&2
exit 1
fi
#check minimum size of text
if [ ${#LOGMSG} -lt 15 ]; then
echo "Your Commit was blocked because the comments does not meet minimum length requirements (15 letters)." 1>&2
exit 1
fi
# get TaskID by regex
TaskID=$(expr "$LOGMSG" : '\([#][0-9]\{1,9\}[:][" "]\)[A-Za-z0-9]*')
# Check if task id was found.
if [ -z "$TaskID" ]; then
echo "" 1>&2
echo "No Task id found in log message \"$LOGMSG\"" 1>&2
echo "" 1>&2
echo "The TaskID must be the first item on the first line of the log message." 1>&2
echo "" 1>&2
echo "Proper TaskID format--> #123- 'Your commit message' " 1>&2
exit 1
fi
#Check that QA should not be present in log message.
QA=$(expr "$LOGMSG" : '\(*[" "][QA][" "]\)')
if [ "$QA" == "QA" ]; then
echo "" 1>&2
echo "Your log message \"$LOGMSG\" must not contain QA in upper case." 1>&2
echo "" 1>&2
exit 1
fi
正則表達式不正確:
\\(
在expr
啟動捕獲組,但您不需要捕獲組來完成任務 *
跟隨\\(
在模式中,它試圖匹配文字*
[QA]
匹配單個字符,可以是Q
或A
expr
的模式必須匹配字符串的開頭 實際上,正則表達式與您的要求不符。
即使以上幾點是固定的,模式QA
,“QA”周圍有空格,也不會匹配這樣的提交消息:
也就是說,您可能希望將QA與字邊界相匹配,而不是在周圍有空格的“QA”。 使用grep -w QA
很容易做到這一點。
正如你在評論中澄清的那樣,你真的想要一個“Q”之前的空格。 在這種情況下, grep
的-w
標志不合適,因為這需要模式兩側的字邊界。 還有另一種匹配字邊界的方法,使用\\<
用於單詞開始,使用\\>
用於單詞結束。 因此,要在“Q”前面有一個空格,在“A”后面有一個單詞邊界,你可以編寫QA\\>
,如下所示:
if grep -q ' QA\>' <<< "$LOGMSG"; then
echo
echo "Your log message \"$LOGMSG\" must not contain QA in upper case."
echo
exit 1
fi 1>&2
注意其他一些改進:
if
語句,而不是將每個echo
重定向到stderr
echo ""
你可以簡單地寫echo
這可能是您的正則表達式檢查“QA”時出錯。
我發現使用這個網站非常有用於測試正則表達式 - RegExr 。
我把你的(* [“”] [QA] [“”])表達式放到網站上,當我查看它的細節(頁面底部的標簽鏈接)時,它會完全分解你的常規表達式會匹配。 據此,它說它正在尋找以下內容:
我將以下表達式放入其中 - ((QA))並且它能夠在示例svn消息中找到匹配(TEST-117 QA測試消息)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.