【问题标题】:How can I force SVN post-commit to send messages to client?如何强制 SVN 提交后向客户端发送消息?
【发布时间】:2012-09-24 14:00:11
【问题描述】:

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

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

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

我读过这篇文章:SVN post-commit hook sending a message back to client,它说 post commit hooks 只能在我使用 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

【问题讨论】:

    标签: bash svn post-commit


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我发现我只需要将我的回声传送到正常的程序输出>&0,因为我希望它们始终出现。也许我的问题具有误导性。无论如何感谢您的回答!
    【解决方案2】:

    如果你的问题是屏蔽svn错误信息,你可以这样做:

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

    【讨论】:

    • 这最终会消除可能发生的任何其他(实际)问题。
    【解决方案3】:

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

    原来程序使用 3 个管道来传输信息:

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

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

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

    【讨论】:

    • 这是完全错误的,fds 0 和 1 是倒退的。我真的不知道为什么重定向到 fd 0 (stdin) 对你有用,但它肯定不是标准的。
    猜你喜欢
    • 2019-01-26
    • 1970-01-01
    • 2019-06-07
    • 2015-04-07
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多