¿Cómo reviso los cambios en un enlace post-commit de Subversion?

He estado trabajando en un enganche post-commit para mi repository de Subversion que actualizará una copy de trabajo particular en mi server en vivo cuando se comprometan otras copys de trabajo. Lo tengo funcionando cuando ejecuto el command de actualización en toda la copy de trabajo, pero no cuando quiero hacerlo para los files particulares que han cambiado. Estoy ejecutando VisualSVN Server en un server de Windows 2008 y el enlace se ejecuta desde un file .cmd.

Cualquier ayuda es muy apreciada. Aquí está el código que estoy usando:

@ECHO OFF svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk" IF %ERRORLEVEL% EQU 0 ( pushd <path_to_working_copy> SET CHANGES=svnlook changed %1 -r %2 FOR /F "tokens=2" %%a IN ('%CHANGES%') DO (svn update %%a --username <username> --password <password>) ) 

Creo que hay un problema con el ciclo FOR, pero no puedo decir de qué se trata. Este es el código que estaba trabajando para actualizar toda la copy de trabajo. Sin embargo, esta solución no es realmente viable, ya que lleva mucho time ejecutar la actualización en cada confirmación:

 @ECHO OFF svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk" IF %ERRORLEVEL% EQU 0 ( pushd <path_to_working_copy> svn update --username <username> --password <password> ) 

EDITAR: He hecho algunas modificaciones menores al código anterior, basado en lo que estoy leyendo acerca de los loops FOR en CMD, pero todavía no está funcionando. No recibo ningún error, pero la actualización no se ejecuta.

EDIT: he encontrado una solución al problema que funciona perfectamente como un file .bat o como un file CMD, pero aún no se actualiza desde post-commit.cmd. No devuelve ningún error, simplemente no ejecuta la actualización:

 @ECHO OFF svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk" IF %ERRORLEVEL% EQU 0 ( FOR /F "tokens=2" %%a IN ('svnlook changed %1 -r %2') DO (SET NEWA=%%a & SET NEWB=%NEWA:trunk/=% & svn update <path_to_working_copy>\%NEWB% --username <username>--password <password>) ) 

testing con esto:

 @ECHO OFF setlocal enableDelayedExpansion svnlook dirs-changed %1 -r %2 | findstr /b /i "trunk" IF ERRORLEVEL 1 ( FOR /F "tokens=2" %%a IN ('svnlook changed %1 -r %2') DO ( SET NEWA=%%a SET "NEWB=!NEWA:trunk/=!" svn update <path_to_working_copy>\!NEWB! --username <username>--password <password>) ) endlocal 

este es uno de los primeros y más confusos problemas que enfrentan los scripters de lotes al comienzo de su "carrera". Aquí hay más información 🙂