如何强制SVN post-commit向客户端发送消息?

时间:2012-09-24 14:00:11

标签: bash svn post-commit

我正在编写一个post-commit钩子,如果它们被更改,它会将某些文件发布到Web服务器。

我想向客户/用户说明他提交后会发生什么。

这就是为什么我添加echo命令将信息返回给客户端。

我读过这篇文章:SVN post-commit hook sending a message back to client,如果我使用exit 1,post post hooks只能返回信息。

这很有效,但它会使客户端感到困惑,因为会显示以下消息:

Warning: post-commit hook failed (exit code 1) with output:

有没有办法绕过这个输出?

如果有帮助,到目前为止我的脚本:

echo "Everything OK. Checking if publishing dir was changed." >&2

svn status /var/www/dev/test/public/projektbereich1/http | grep [AMCDG]
if [ $? -eq 0 ]  ; then
    echo "Dir has changed. Publishing files." >&2
cp -R /var/www/dev/test/public/projektbereich1/http /var/www/public/

else
    echo "Dir has not changed. Webserver does not get updated." >&2
fi

exit 1

3 个答案:

答案 0 :(得分:0)

您显式退出时返回码为1,表示错误。将出口1改为退出0,你应该好好去。

或者,设置一个变量来保存else的每个分支中的返回码。 0如果成功,1如果失败,则退出$ myreturncode。

我知道你认为你需要返回1,但在我的post-commit钩子中,我生成并发送电子邮件然后返回0。

如果您希望svn框架为您发送错误,则只需返回1。在成功的情况下,你需要处理“它工作!”留言/给自己发电子邮件。

答案 1 :(得分:0)

如果您的问题是屏蔽svn错误消息,您可以执行以下操作:

svn status /var/www/dev/test/public/projektbereich1/http 2>/dev/null | grep [AMCDG]

答案 2 :(得分:0)

感谢Stephane,我搜索了2> / dev / null,2>& 1等的含义。

事实证明,程序使用3个管道传输信息:

  • 0:正常输出(STDOUT)
  • 1:正常输入(STDIN)
  • 2:错误输出(STDERR)

所以我只需要将我的回声传递给programoutput >&0

例如:echo "Everything OK. Checking if publishing dir was changed." >&0