6

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

4

3 回答 3

7

颠覆钩子吃掉他们的标准输出。一旦脚本运行,就没有 STDOUT。您甚至不能让预提交脚本将 STDOUT 发送到另一个进程。

然而在 pre-commit 钩子中,STDOUT 仍然存在并且仍然可以被重定向。例如,我的钩子由一个 shell 脚本组成,该脚本由几行 Unix 命令行实用程序组成。每个命令行实用程序都有一个 STDIN 和一个 STDOUT,我可以通过管道从一个到另一个。但是,一旦该钩子脚本完成执行,就没有 STDOUT。

另一件事是没有办法通过钩子范式来传达 STDOUT。Subversion 不提供任何类型的通信链接。STDERR 有一个链接,但前提是钩子本身失败。这是一个预提交钩子,我怀疑你是否故意想让这个钩子失败只是为了给用户报告。

您可以做的是使用其他通知方法。有些人建议使用电子邮件。您可以运行一个提交后脚本来生成报告并根据用户的电子邮件地址发送该报告。我不会将此作为预提交触发器,因为您不希望事务因为报告不起作用而失败。

有人建议您可以将执行提交的用户映射到电子邮件地址并通过电子邮件发送给用户。我不会这样做,因为用户只会忽略电子邮件。他们已经收到了数十封(如果不是数百封)来自各种流程的电子邮件,提醒他们注意这个或那个。

我建议使用像 Hudson 这样的产品进行持续构建,并让 Hudson 生成此报告并发布在 Hudson 生成的构建页面上。这样,开发人员可以返回并检查报告。事实上,Hudson 已经有各​​种插件可以进行错误检查并生成各种漂亮的报告和图表(通常与 findbugs 或其他类似的项目一起使用)。

其中一个更有趣的插件是一个游戏,它为成功构建、修复错误和警告等奖励积分。它提供了一个排行榜,因此开发人员可以将他们的分数与其他开发人员进行比较。我从未使用过它,但 Hudson 用户组中的一些人说,开发人员在他们的分数上变得非常有竞争力。

于 2010-07-26T02:31:52.007 回答
0

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

于 2010-07-23T12:31:02.473 回答
0

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

于 2012-04-25T19:18:30.830 回答