Warum funktioniert meine Hook-Bedingungsanweisung nach dem Festschreiben nicht, wenn ich prüfe, ob ein bestimmter Zweig festgeschrieben wurde?
Ich führe Subvbersion über VisualSVN Server auf einem Windows-Server aus und habe mein Repository mit einem Trunk und drei Zweigen eingerichtet. Die Zweige sind dev, test und prod. Ich möchte einen Post-Commit-Hook ausführen, der eine Arbeitskopie nach dem Ausführen eines Commits aktualisiert. Ich möchte jedoch, dass diese Arbeitskopie nur dann aktualisiert wird, wenn das Commit im dev-Zweig ausgeführt wurde.
Dies ist der Code, den ich gerade habe ...
@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
Wenn ich die Bedingung entferne, wird das Update bei jedem Commit ausgeführt, sodass ich weiß, dass der Code in der Bedingung funktioniert. Ich habe die Bedingung auch als reguläre Batch-Datei getestet und Zeichenfolgen wie "branches / dev" und "branches / test" gesendet, und sie hat sich in diesen Tests ordnungsgemäß verhalten. Wenn ich dies jedoch als Hook-Skript nach dem Festschreiben speichere, wird es nie ausgeführt, unabhängig davon, ob sich das Festschreiben im dev-Zweig befindet oder nicht.
EDIT: Aufgrund des Feedbacks, dass diese Frage bereits beantwortet wurde, habe ich den in der anderen Frage empfohlenen Ansatz ausprobiert, aber dieser Ansatz funktioniert auch nicht. Hier ist meine Version des dort vorgeschlagenen Codes:
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 %*
Damit dies funktioniert, habe ich im Hook-Verzeichnis eine Datei namens post-commit-actions.bat erstellt, um das SVN-Update auszuführen. Dies wird jedoch nicht nach dem Festschreiben ausgeführt. Wenn ich relevante Informationen auslasse, lassen Sie es mich bitte wissen.
EDIT: Danke für die Hilfe aller. Mit dem Input hier konnte ich eine funktionierende Lösung zusammenstellen. Für diejenigen, die nach einer Antwort auf ein ähnliches Problem suchen, hat es so funktioniert:
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>
)