Как запустить асинхронно медленно запускаемый пакет, в частности, SVN post-commit? - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть медленно работающий пакетный файл, который составляет журнал изменений и затем отправляет электронное письмо пользователю. Я бы не хотел, чтобы пользовательские коммиты выполнялись медленно в 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

Если я закомментирую строку «СТАРТ», она запускается и заканчивается мгновенно. Если я удалю комментарий, это займет вечность. Я думал, что это должно позволить пост-фиксации быстро вернуться в SVN.

Можно ли как-нибудь заставить код не зависать в Subversion, но по-прежнему выполнять задачу электронной почты в фоновом режиме?

1 Ответ

1 голос
/ 28 апреля 2011

Попробуйте запустить скрипт реального хука в отдельном процессе:

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

если это не сработает, найдите инструмент, который может запустить другой bat-файл в отдельном процессе / потоке.

...