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