Windows服务器上的svn post-commit钩子

时间:2014-03-22 13:01:21

标签: windows svn batch-file post-commit svn-hooks

我正在尝试在Windows服务器上设置一个svn post-commit挂钩,这样每次提交时,它都会连接到我的bug跟踪网站上的现有项目的问题。

因为Windows没有预先提交的提交后挂钩(或者至少我找不到符合我需要的挂钩),我试着为自己编写批处理文件。

SET REPOS=%1
SET REV=%2
SET SVNLOOK="C:\Program Files (x86)\VisualSVN Server\bin\svnlook.exe"
SET PROJECT=3

%SVNLOOK% log -r %REV% "%REPOS%" > COMMIT_MSG
SET /p COMMIT_MSG= < COMMIT_MSG
echo %COMMIT_MSG%

C:\curl\bin\curl "http://www.mybugtrackingsite.de/vcs_integration/report/%PROJECT%/?passkey=KEY" --data-urlencode "msg=%COMMIT_MSG%"

当我自己设置REPOS和REV并从命令行运行脚本时它可以工作,但是当我进行提交它不起作用而我的COMMIT_MSG只包含“echo is on”而不是实际的消息

我已经读过,svn存储库执行带有空环境的钩子程序,意味着根本没有设置任何环境变量,这可能就是为什么我的脚本手动运行而不是由svn运行的原因。

但我需要设置哪些变量以及如何设置?我的路径已经是绝对的,所以这不应该是问题。我不是一个Windows家伙,我不是真的批量 - 所以任何帮助或想法如何我得到这个东西工作将不胜感激!

2 个答案:

答案 0 :(得分:0)

您正在将REPOSREV设置为%1。其中一个应该是%2

您还应将@ECHO OFF放在文件顶部以避免屏幕上不必要的输出

答案 1 :(得分:0)

将提交消息重定向到文件时,使用相对路径“COMMIT_MESSAGE”。

%SVNLOOK% log -r %REV% "%REPOS%" > COMMIT_MSG

svn hook使用的工作目录可能与您的工作目录不同,并且svn进程无权在此位置写入。您可以使用绝对路径。

您也可以尝试重定向STDERR以查看是否从svnlook收到错误。

同时删除钩子脚本开头的文件,以确保不使用上一次运行的文件。