我的预提交是调用perl脚本commit_log.pl
。脚本正在做很多预先检查。现在我试图在提交批准后发送邮件。我们无法设置post-由于某些权限问题而提交挂钩。所以我试图在预提交脚本本身中调用发送邮件。
如果退出代码为零,则在我的commit_log.pl
中,即使printf
无效。
如果退出代码为1,一切正常
pre-commit
:
log=`$SVNLOOK log -t "$TXN" "$REPOS"`
author=`$SVNLOOK author -t "$TXN" "$REPOS"`
CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS"`
/usr/bin/perl /isource/svnroot/fgw_ins/hooks/user/commit_log.pl "$log" "$author" "$CHANGED" "$0" 1>&2
if [ "$?" -eq "1" ];
then
exit 1
else
exit 0
fi
# if does not match..fail...
exit 1
---------------------------------------------------------------------------------
commit_log.pl
------------------------
}
else
{
print("Commit approved\n");#this printf itself is not working
`python $path/send_mail.py $comment $committed_filepath`;
exit 0;
}
答案 0 :(得分:1)
无法向Avi's添加更多答案:STDOUT被钩子吞没了。您将从不看到STDOUT。如果钩子脚本返回一个非零的exitcode,通常意味着钩子失败,并且在预提交钩子中阻止提交,则客户端只能看到STDERR。
如果您需要在提交后发送邮件,并且不能使用post-commit挂钩,我建议您使用像Jenkins这样的连续构建系统。您可以让Jenkins监视您的存储库,当它看到新版本时,向相关人员发送电子邮件。
Jenkins是一个连续构建系统,它可以在每次提交后进行构建,但是没有理由你需要进行构建(除了它通常是一个好主意)。 Jenkins可以设置为执行 post commit 的任何操作,因此您可以让Jenkins通过电子邮件向相关人员发送电子邮件。
是的,像詹金斯这样的整个系统只是发送电子邮件,这有点过分。为什么不简单地编写自己的脚本?但是,您可以在一两个小时内下载,安装和配置Jenkins。只需布置您认为需要完成的工作,您需要更长的时间。
此外,一旦你有詹金斯,你会发现它有很多其他用途。
答案 1 :(得分:0)
我不确定预提交挂钩的标准输出发送到哪里。根据{{3}},标准错误被发送回客户端,但仅在出现错误时(即退出时使用非零退出代码)。
我会尝试写入特定位置,而不是标准输出(例如/tmp/pre-commit.log用于测试目的)。
此外,通常,您可能应尽可能避免在假定提交成功的预提交脚本中进行工作。在提交前脚本运行后,提交可能仍然失败,例如在提交本身期间,这就是提交后脚本存在的原因。