Поведение пакетного скрипта после выполнения SVN отличается от обычного исполнения

Нужна небольшая помощь с svn post-commit Пакетный скрипт. Вот что у меня есть:

после commit.bat:

1. @ECHO OFF
2. cd D:\Subversion\...\hooks
3. SET OUTPUT = default
4. FOR /F "tokens=*" %%a in ('revision.bat') do ( SET OUTPUT=%%a )
5. findstr /m "Autobuild" D:\Subversion\...\db\revprops\0\%OUTPUT%
6. if %errorlevel%==0 (
7.   call website.bat
8. )

website.bat:

D:\Subversion\...\hooks\wget http://website.com/service-trigger

revision.bat:

svnlook youngest D:\Subversion\...

Итак, здесь происходит то, что

  1. После фиксации в хранилище скрипт извлекает последний revision число

  2. Использует этот номер, чтобы найти файл в журналах ревизий

  3. Попробуйте найти определенную строку в этом журнале

  4. Если конкретная строка существует, запустите какой-то URL

Моя проблема в том, что этот скрипт выполняется при вызове напрямую из cmd, но когда SVN вызывает его, кажется, что в строке № 5 происходит что-то странное, потому что я не получаю никакой ошибки, но строка № 7 никогда не вызывается.

Я подозреваю, что, возможно, я должен запустить скрипт от имени администратора, но так как я никогда серьезно не программировал для Windows, я не уверен, и мне нужна помощь

1 ответ

Решение

Пробелы важны в SET заявления. В строке 3 вы устанавливаете переменную "output " не "output"

Удалить пробелы вокруг = в строке 3 и после %%a в строке 4 (но косметические только здесь.)

Также - не ясно, ... is (опущено) или (parent-of-parent). Если абсолютное имя файла содержит пробелы, "quote it"

Также может быть, что ваш начальный каталог отличается для каждого вызова. cd в строке 2 изменяет текущий каталог на D: диск, но не влияет на диск по умолчанию. Вам нужно выполнить D: переключить по умолчанию на диск D:, revision.bat в строке 4 относительно значения по умолчанию.

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