0

我有一个运行缓慢的批处理文件,它编译更改日志,然后通过电子邮件发送给用户。我希望它不会导致用户的提交在 TortoiseSVN 中执行缓慢。

@ECHO OFF
SET REPOS=%1
SET REV=%2
SET DIR=%REPOS%/hooks
SET PATH=%PATH%;%DIR%;C:\Utils 
SET WORKING_COPY=C:\path\to\local\copy\
SET SITENAME=MySiteName
SET SMTP_SERVER=11.11.11.11
SET EMAIL_TO=my@email.email
SET EMAIL_FROM=my@email.email
SET SUBJECT=SVN Update - %SITENAME% - rev %REV% - %REPOS%

svn cleanup %WORKING_COPY%
svn update %WORKING_COPY%


ECHO The following changes were made to the code: > %DIR%/email.txt
ECHO. >> %DIR%/email.txt


svn log %WORKING_COPY% -v -r "%REV%" >> %DIR%/email.txt


svn diff %WORKING_COPY% -c "%REV%" --no-diff-deleted >> %DIR%/email.txt


sendEmail -s %SMTP_SERVER% -t %EMAIL_TO% -f %EMAIL_FROM% -u "%SUBJECT%" -o message-file=%DIR%/email.txt

我意识到这运行得很慢,所以我将它移动到另一个文件“email-changes.bat”并创建了一个简单的批处理来异步调用这个批处理。

@ECHO OFF
#START %1\hooks\email-changes.bat %1 %2
echo 'fired' > %1\hooks\test.log

如果我注释掉“START”行,它会立即运行并完成。如果我删除评论,它需要永远完成。我认为这应该允许 post-commit 快速返回到 SVN。

有什么办法可以让代码不挂在 Subversion 中,但仍然在后台完成电子邮件任务?

4

1 回答 1

1

尝试在单独的进程中启动真正的钩子脚本:

@ECHO OFF
cmd.exe /c START %1\hooks\email-changes.bat %1 %2
echo 'fired' > %1\hooks\test.log

如果这不起作用,请找到一个可以在单独的进程/线程中启动另一个 bat 文件的工具。

于 2011-04-28T14:27:17.647 回答