У меня есть .bat и внутри .bat я хотел бы выполнить специальный код, если есть какая-то модификация в репозитории svn (например, компиляция).обнаружить изменения svn в .bat
ответ
для Win 2000 и позже, это было бы назначить последний выходной строки из вводе команды состояния СВН переменной svnOut, а затем проверить, если переменная содержит что-нибудь:
@echo off
set svnOut=
set svnDir=C:Your\path\to\svn\dir\to\check
for /F "tokens=*" %%I in ('svn status %svnDir%') do set svnOut=%%I
if "%svnOut%"=="" (
echo No changes
) else (
echo Changed files!
)
Почему есть линия, как этот
set svnOut=
Вы должны сами выяснить. ;-)
Хотите ли вы, чтобы это было реактивным? Или по требованию?
Для реактивных см. hooks. Сценарий должен быть назван в соответствии с его назначением: pre-commit.bat, post-commit.bat. Сценарии называются: [сценарий] [репо-путь] [редакция номер]
Ибо, по требованию:
- рабочей копии
- журнала СВН
- svn st
- svn diff
- СВН proplist
- Repository
- svnlook автор
- svnlook изменил
- Дата svnlook
- svnlook дифф
- История svnlook
Пример:
svn st "C:\path\to\working\directory\" >> C:\path\to\working\project.log
Каждый раз, когда вы запускаете БАТ, он будет добавить й вывод проекта. log. При необходимости отрегулируйте.
Хорошо, решение, которое я нашел с помощью Tooony:
set vHEAD = 0
set vBASE = 0
set svnDir=<path to local svn directory>
for /F "tokens=1,2" %%I in ('svn info -r HEAD %svnDir%') do if "%%I"=="Revision:" set vHEAD=%%J
for /F "tokens=1,2" %%I in ('svn info -r BASE %svnDir%') do if "%%I"=="Revision:" set vBASE=%%J
if "%vBASE%"=="%vHEAD%" (
echo No changes
) else (
echo Changed files!
)
иметь свой.bat выполнить svnversion
(если вы используете Subversion) или SvnWCRev.exe
(если вы используете TortoiseSVN) против самого верхнего уровня вашей рабочей копии.
Оба выхода, если ваша рабочая копия была изменена.
svnversion
добавляет «M» к его выходу. SvnWCRev.exe
напечатает текст, который был изменен WC.
Эта версия основана на @ tooony, но проверяет сервер на наличие обновлений вместо клиента.
@echo off
set svnOut=
rem Check svn server status of current working directory repository and see if first or second token is an *
for /F "tokens=1" %%I in ('svn status --show-updates') do if "%%I"=="*" set svnOut=%%I
rem echo "%svnOut%"
if "%svnOut%"=="" (
echo No changes
) else (
echo Changed files!
)
Это по требованию. Я знаю команду svn (легко найти их eveyrwhere). Вопрос заключается в том, чтобы знать, как использовать это в .bat скрипт – acemtp 2008-10-03 12:14:11
Я не хочу, чтобы поставить статус в лог-файл :) Я хочу код в .bat, что сделать что-то вроде: если (svn_changed()) сделаю это прочее сделаю это – acemtp 2008-10-03 12:37:15