[在运行SVN预提交钩子时如何向用户发送标准输出

问题描述 投票:6回答:4

我有一个用于SVN的预提交钩子,该钩子运行错误检查程序,并在出现问题时中止提交。如果发生问题,将stderr重定向到用户发起提交的位置。但是,即使没有发现问题,我也想从错误检查器程序发送用户输出,以便通知用户错误检查器已运行并且没有发现问题。如何使用SVN预提交挂钩?

svn pre-commit-hook
4个回答
7
投票

Subversion钩吃掉了它们的STDOUT。一旦脚本运行,就没有STDOUT。您甚至无法让预提交脚本将STDOUT发送到另一个进程。

但是在预提交挂钩中,STDOUT仍然存在,并且仍可以重定向。例如,我的钩子由一个shell脚本组成,该脚本由几行Unix命令行实用程序组成。每个命令行实用程序都有一个STDIN和一个STDOUT,我可以从一个管道到另一个管道。但是,一旦该钩子脚本完成执行,就不会出现STDOUT。

另一件事是,没有办法通过挂钩范式传递STDOUT。 Subversion不提供任何形式的通信链接。有一个指向STDERR的链接,但前提是该挂钩本身失败了。这是一个预先提交的钩子,我怀疑您有意使该钩子失败,只是为了向用户提供报告。

您可以使用其他通知方法。有人建议使用电子邮件。您可以运行提交后脚本来生成报告,并根据用户的电子邮件地址通过电子邮件发送该报告。我不会将其作为预提交触发器,因为您不希望由于报告无效而导致交易失败。

[有人建议您可以使用电子邮件地址来映射执行提交的用户,并通过电子邮件向该用户发送电子邮件。我不会这样做,因为用户只会忽略电子邮件。他们已经从各种过程中收到了数十封电子邮件,即使不是数百封电子邮件,也提醒他们注意这一点。

我建议使用Hudson之类的产品进行连续构建,并将此报告由Hudson生成并发布在Hudson生成的构建页面上。这样,开发人员可以返回并检查报告。实际上,Hudson已经拥有各种插件来执行错误检查并生成各种精美的报告和图形(通常与findbug或类似的其他项目一起使用)。

更有趣的插件之一是game,该得分奖励成功构建,修复错误和警告等的得分。它提供了一个排行榜,以便开发人员可以将其得分与其他开发人员进行比较。我从未使用过它,但是Hudson用户组中的一些人说,开发人员在得分上具有很大的竞争力。


0
投票

您必须以某种方式将用户名映射到电子邮件地址。然后,您可以将输出收集到文件中,并将其邮寄到提交者。


0
投票

就我而言,我编写了一个简单的C#Windows窗体应用程序以显示挂钩的进度。


0
投票

[curl可以通过预提交钩子以某种方式写入Shell接口...至少在mac上...虽然我不确定如何做到这一点...

© www.soinside.com 2019 - 2024. All rights reserved.