Пакетный скрипт для поиска конкретной строки в файле ревизии SVN
Мне нужна помощь с пакетным скриптом Windows
Чего я пытаюсь достичь:
- получить самую младшую (последнюю) ревизию из хранилища
- поиск определенной строки в этом файле
- если строка существует, загрузите веб-страницу
Что я пробовал:
set REVNO=$(svnlook youngest D:\Subversion\...)
set REVURL=D:\Subversion\...\db\revprops\0\
findstr /m "string_I_am_searching_for" %REVURL%%REVNO%
if %errorlevel%==0 (
start http://webpage
)
Почему я пытаюсь сделать это:
Я хочу запустить автоматический тест Hudson CI после коммита, который содержит определенную строку в сообщении (например, Autobuild: true
)
Я не могу отладить свой код, так как я не знаком с пакетными сценариями Windows
В моем сценарии я использовал:
- Объединение переменных (которые могут быть неправильными), потому что я не был уверен, смогу ли я добавить переменную к пути
findstr
чтобы найти, содержит ли файл строку (я знаю, что findstr можно использовать и для переменных)
Я не удивлюсь, если у моего маленького сценария есть семантические проблемы, а также проблемы с синтаксисом, потому что, как я уже упоминал, я до сих пор не выполнял так много пакетных сценариев
У меня нет требований, нет спецификаций, поэтому сценарий может быть реализован любым возможным способом. Так что я открыт для предложений
PS Я читал также, что с использованием процедур с избыточным весом на post-commit
не очень хорошая идея, потому что SVN не возвращает управление обратно пользователю, пока это не сделано со всем -> Это не большая проблема
РЕДАКТИРОВАТЬ: я обнаружил путем бокового тестирования, что я на самом деле не набрал самый молодой номер ревизии, а скорее использовал командную строку. Итак, немного погуглив, я обнаружил, что в Windows не так просто вызвать какую-то команду и сохранить результат в переменной. Поэтому я решил использовать файл для хранения промежуточных результатов.
Вот что я пробовал:
cd D:\Subversion\...\hooks
SET OUTPUT=testing
FOR /F "tokens=*" %a in ('revision.bat') do ( SET OUTPUT=%a )
findstr /m "o" D:\Subversion\...\db\revprops\0\%a
if %errorlevel%==0 (
start http://webpage
)
в revision.bat:
svnlook youngest D:\Subversion\...
Теперь я получаю эту ошибку в SVN:
post-commit hook failed (exit code 255) with output:
a" ) was unexpected at this time.
Я считаю, что это потому, что я создаю переменную a
в неправильном месте в неподходящее время. Но я не получаю эту ошибку, если я запускаю bat-файл вручную
1 ответ
Нашел один способ сделать это - сохранить промежуточную функцию в файле.bat:
после commit.bat
@ECHO OFF
cd D:\Subversion\...\hooks
SET OUTPUT
FOR /F "tokens=*" %%a in ('revision.bat') do ( SET OUTPUT=%%a )
findstr /m "o" D:\Subversion\...\db\revprops\0\%OUTPUT%
if %errorlevel%==0 (
start http://website
)
revision.bat
svnlook youngest D:\Subversion\...
На мой взгляд, это скорее обходной путь, чем решение
Спасибо: https://serverfault.com/questions/245679/store-output-of-windows-command-in-batch-file