2011-03-01 110 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