Почему мой условный оператор post-commit hook не работает, когда я проверяю, зафиксирована ли конкретная ветка?
я запускаю Subvbersion через VisualSVN Server на сервере Windows, и мой репозиторий настроен со стволом и тремя ветвями. Ветви dev, test и prod. У меня есть ловушка после фиксации, которую я хочу запустить, которая обновляет рабочую копию после запуска фиксации, но я хочу, чтобы она обновляла эту рабочую копию, только если фиксация была сделана в ветви dev.
Это код, который у меня есть сейчас ...
@setlocal enableextensions enabledelayedexpansion
@echo off
SET str1=%1
IF NOT x%str1:dev=%==x%str1% (
pushd
svn update --username --password
echo update complete
)
endlocal
Если я снимаю условное выражение, обновление запускается при каждом коммите, поэтому я знаю, что код внутри условного кода работает. Я также протестировал условный файл как обычный пакетный файл, отправив в нем строки вродефилиалы / DEV» а также "филиалы / тест» и он вел себя правильно в этих тестах. Однако, когда я сохраняю это как свой скрипт ловушки после фиксации, он никогда не запускается, независимо от того, находится ли коммит в ветке dev или нет.
РЕДАКТИРОВАТЬ: Основываясь на обратной связи, что этот вопрос уже был дан ответ, я попробовал подход, рекомендованный в другом вопросе, но этот подход тоже не работает. Вот моя версия кода, предложенная там:
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 %*
Для того, чтобы это работало, я создал файл в каталоге ловушек с именем post-commit-actions.bat для выполнения обновления svn. Тем не менее, это не запуск пост-фиксации. Если я'Я опускаю любую соответствующую информацию, пожалуйста, дайте мне знать.
РЕДАКТИРОВАТЬ: Спасибо за всехс помощью. Благодаря этому я смог собрать рабочее решение. Для тех, кто ищет ответ на похожую проблему, он работает так:
svnlook dirs-changed %1 -r %2 | findstr /b /i "branches/dev"
IF %ERRORLEVEL% EQU 0 (
pushd
svn update --username --password
)