Пакетный скрипт для поиска конкретной строки в файле ревизии 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

Другие вопросы по тегам