Dlaczego moja instrukcja warunkowa po zatwierdzeniu nie działa, gdy sprawdzam, czy dana gałąź została zatwierdzona?
Używam Subvbersion za pośrednictwem serwera VisualSVN na serwerze Windows i ustawiam moje repozytorium z pniem i trzema gałęziami. Gałęzie to dev, test i prod. Mam hak po zatwierdzeniu, który chcę uruchomić, który aktualizuje kopię roboczą po uruchomieniu zatwierdzenia, ale chcę tylko zaktualizować kopię roboczą, jeśli zatwierdzenie zostało wykonane w gałęzi dev.
To jest kod, który mam teraz ...
@setlocal enableextensions enabledelayedexpansion
@echo off
SET str1=%1
IF NOT x%str1:dev=%==x%str1% (
pushd <path to working copy>
svn update --username <svn_username> --password <svn_password>
echo update complete
)
endlocal
Jeśli usunę warunkowe, aktualizacja będzie działać przy każdym zatwierdzeniu, więc znam kod wewnątrz prac warunkowych. Przetestowałem również warunkowy jako zwykły plik wsadowy, wysyłając go łańcuchy takie jak „branch / dev” i „branches / test” i zachowywał się poprawnie w tych testach. Jednakże, kiedy zapiszę to jako mój skrypt przechwytujący po zatwierdzeniu, nigdy się nie uruchomi, czy zatwierdzenie jest w gałęzi dev, czy w inny sposób.
EDYCJA: Na podstawie opinii, że to pytanie zostało już udzielone, spróbowałem podejścia zalecanego w innym pytaniu, ale to podejście również nie działa. Oto moja wersja sugerowanego tam kodu:
REM The command checks whether the committed revision changes any data under '/dev'
"%VISUALSVN_SERVER%bin\svnlook.exe" dirs-changed %1 --revision %2 | findstr /b "[Dd]ev"
REM If 'findstr' returns error code 0, it means that the commit involves the '/dev' directory.
REM So if the the returned code is 0 the command runs external batch 'post-commit-actions.bat'
If %ERRORLEVEL% EQU 0 call %~dp0post-commit-actions.bat %*
Aby to zadziałało, utworzyłem plik w katalogu hooks o nazwie post-commit-actions.bat, aby wykonać aktualizację svn. Jednak to nie działa po zatwierdzeniu. Jeśli pomijam wszelkie istotne informacje, daj mi znać.
EDIT: Dzięki za pomoc wszystkich. Dzięki wejściu udało mi się zebrać działające rozwiązanie. Dla tych, którzy szukają odpowiedzi na podobny problem, działało to tak:
svnlook dirs-changed %1 -r %2 | findstr /b /i "branches/dev"
IF %ERRORLEVEL% EQU 0 (
pushd <path-to-working-copy>
svn update --username <repo-username> --password <repo-password>
)