我正在尝试在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家伙,我不是真的批量 - 所以任何帮助或想法如何我得到这个东西工作将不胜感激!
答案 0 :(得分:0)
您正在将REPOS
和REV
设置为%1
。其中一个应该是%2
您还应将@ECHO OFF
放在文件顶部以避免屏幕上不必要的输出
答案 1 :(得分:0)
将提交消息重定向到文件时,使用相对路径“COMMIT_MESSAGE”。
%SVNLOOK% log -r %REV% "%REPOS%" > COMMIT_MSG
svn hook使用的工作目录可能与您的工作目录不同,并且svn进程无权在此位置写入。您可以使用绝对路径。
您也可以尝试重定向STDERR以查看是否从svnlook收到错误。
同时删除钩子脚本开头的文件,以确保不使用上一次运行的文件。