2013-07-09 2 views
1

мне нужна помощь с окна пакетного сценарияПакетный скрипт для поиска определенной строки в правке файла SVN

Что я пытаюсь достичь:

  • получить самый молодой (последний) пересмотр с репозиторий поиск
  • для конкретной строки в этом файле
  • если строка существует, загрузить веб-страницу

Что я пробовал:

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 может использоваться и для переменных)

Я не удивлюсь, если мой маленький скрипт имеет семантические проблемы, а также синтаксические проблемы, потому что, как я уже говорил, я не сделал, что большая часть пакетного сценариев, прежде чем

У меня нет никаких требований, нет спецификаций, поэтому сценарий может быть реализован любым способом. Поэтому я открыт для предложений

P.S. Я читал также, что использование избыточного веса процедур на post-commit не является хорошей идеей, потому что СВН не возвращает управление обратно пользователю до тех пор, пока не будет сделано со всем -> Это не большая проблема

EDIT: I что я действительно не получил самый младший номер ревизии, а скорее использовал командную строку. SO после googling немного больше, я обнаружил, что в 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 
) 

в правке.Летучая мышь:

svnlook youngest D:\Subversion\... 

Теперь я получаю эту ошибку в SVN:

post-commit hook failed (exit code 255) with output: 
a") was unexpected at this time. 

Я считаю, что это потому, что я создать переменную a в неправильном месте в неправильное время. Но я не получаю эту ошибку, если я запустить файл вручную битой

+0

Вы сказали нам, что вы пробовали, но ничего о результатах, сообщениях об ошибках и т. Д. – Endoro

+0

@ Эndoro хорошо, как я уже сказал, я не знаю, как отлаживать пакетные скрипты. И поскольку это выполняется на заднем плане, я не вижу командной строки. Когда я пытаюсь писать в файл с помощью 'echo% REVURL %% REVNO% >> file.txt', файл не создается –

+0

Файл может быть создан, но поскольку вы не указали полный путь к' file.txt ' вы не знаете, куда он идет. Укажите полный путь ** к файлу file.txt и убедитесь, что в любой учетной записи, выполняемой вашим серверным процессом, есть разрешение на запись в этот путь. – alroc

ответ

0

Найдено один из способов сделать это - хранить промежуточные функции в 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 
) 

пересмотра .bat

svnlook youngest D:\Subversion\... 

Это скорее временное решение, чем решение, на мой взгляд

Благодаря: https://serverfault.com/questions/245679/store-output-of-windows-command-in-batch-file

+0

'start' вызовет Internet Explorer (или любой другой веб-браузер по умолчанию), который в какой-то момент ожидает интерактивного пользователя. Что вы делаете обо всех процессах iexplore.exe, которые будут порождены, но не прекращены? – alroc

+0

@alroc не требуется взаимодействие, сайт запускает сервис, который делает все остальное. Пока не думал о процессах. Я открыт для всех советов и предложений –

+0

. Через несколько недель на вашем сервере у вас будет куча заброшенных процессов iexplore.exe. У вас есть * подумать об этом, прежде чем внедрять такой скрипт. Если доступ к URL-адресу один раз - это все, что требуется для запуска процесса, используйте что-то вроде 'wget' или PowerShell' Invoke-WebRequest', которые не оставят осиротевших процессов, разбросанных вокруг , Или найдите способ настроить Hudson для самостоятельного контроля за этим изменением, не требуя вообще скрипта hook. – alroc

Смежные вопросы