SVN提交后钩子向客户端发送消息

11

我正在写一个Bash脚本的post-commit钩子,我想向进行提交的客户端传递消息。然而

echo my message >&2

无法传回客户端。使用 post-commit hook 发送信息是否可能?

3个回答

14

如果Hook失败了,它只会显示标准错误输出(STDERR),而不会显示标准输出(STDOUT)。 因此,您必须从脚本返回非零代码才能将“我的消息”传递给用户(只需在echo后添加exit 1)。

请看这里:

  

如果post-commit钩子返回非零退出状态,则提交不会被中止,因为提交已经完成。   但是,钩子打印到stderr的任何内容都将被封送回客户端,使得更容易诊断Hook失败。


6

考虑到提交后钩子的作用:

任何钩子输出到错误流中的内容都将被打包回传给客户端,这使得更容易诊断钩子失败的原因。

您可以检查是否存在简单引号问题:

echo "my message" >&2

在这些钩子示例中,您可以看到任何对>&2echo都包含引号。

重定向的bash章节也包含有引号的示例。

但是,正如pmod他的答案中详细说明的那样,只有当脚本的退出状态与0不同时,标准错误消息才会可见,就像在"subversion post-commit hook: print an error message that the user can see?"中所示。

#!/bin/bash
echo "test" >&2
exit 1

正如pmod在下面所说的那样,只有当此(或任何)钩子返回非零返回值时,stderr屏幕才会打印到客户端。这可能是@CamelBlues遇到的问题。 - physicsmichael
这个答案是错误的。Pmod 是正确的,脚本必须返回一个非 0 值。 - Catskul

4

我曾经遇到过同样的问题,涉及 Apache 和 mod_svn。后来发现,当被编组的文本包含 &<> 字符时,编组过程会失败。将这些字符替换为 &amp;&lt;&gt; 后,文本就可以通过了。


谢谢!这正是我们在mod_svn中遇到的问题。我从来没有想到会是这个原因... - Dave Brondsema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接