windows - Hvordan kører jeg en slow-running-batch Asynkront, specifikt en SVN-post-commit?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en langsom kørende batchfil, der udarbejder en logfil af ændringer og derefter e-mails en bruger. Jeg vil gerne have det ikke at få brugerens forpligtelse til at udføre langsomt i TortoiseSVN.


@ECHO OFF
SET REPOS=\%1
SET REV=\%2
SET DIR=\%REPOS\%/hooks
SET PATH=\%PATH\%;\%DIR\%;C:Utils 
SET WORKING\_COPY=C:path	olocalcopy
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


Jeg indså, at dette kørte langsomt, så jeg flyttede det til en anden fil 'email-changes.bat' og oprettede en simpel batch for at kalde denne batch asynkront.


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


Hvis jeg kommenterer linjen 'START', kører den og afslutter med det samme. Hvis jeg fjerner den kommentar, det tager for evigt at fuldføre. Jeg troede det skulle gøre det muligt for post-commit at vende tilbage til SVN hurtigt.


Er der nogen måde, jeg kan få koden til ikke at hænge i Subversion, men alligevel fuldføre e-mail-opgaven i baggrunden?

Bedste reference


Prøv at starte det virkelige hook script i en separat proces:


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


hvis det ikke virker, skal du finde et værktøj, der kan starte en anden flagermusfil i en separat proces/tråd.