1

我正在编写一个提交后挂钩,如果它们被更改,它会将某些文件发布到网络服务器。

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

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

我读了这篇文章:SVN post-commit hooks sent a message back to client说 post commit hooks can only return information if I use exit 1.

这很好用,但它让客户感到困惑,因为出现以下消息:

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
4

3 回答 3

0

您以 1 的返回码显式退出,这表示错误。将出口 1 更改为出口 0,您应该一切顺利。

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

我了解您认为您需要返回 1,但在我的提交后挂钩中,我生成并发送电子邮件,然后返回 0。

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

于 2012-09-24T16:48:41.957 回答
0

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

svn status /var/www/dev/test/public/projektbereich1/http 2>/dev/null | grep [AMCDG]
于 2012-09-24T16:48:48.770 回答
0

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

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

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

所以我只需要将我的回声传送到程序输出,即>&0

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

于 2012-09-25T07:59:34.447 回答