2008-10-03 3 views

ответ

6

для 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= 

Вы должны сами выяснить. ;-)

1

Хотите ли вы, чтобы это было реактивным? Или по требованию?

Для реактивных см. 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. При необходимости отрегулируйте.

+0

Это по требованию. Я знаю команду svn (легко найти их eveyrwhere). Вопрос заключается в том, чтобы знать, как использовать это в .bat скрипт – acemtp 2008-10-03 12:14:11

+0

Я не хочу, чтобы поставить статус в лог-файл :) Я хочу код в .bat, что сделать что-то вроде: если (svn_changed()) сделаю это прочее сделаю это – acemtp 2008-10-03 12:37:15

3

Хорошо, решение, которое я нашел с помощью 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! 
) 
2

иметь свой.bat выполнить svnversion (если вы используете Subversion) или SvnWCRev.exe (если вы используете TortoiseSVN) против самого верхнего уровня вашей рабочей копии.

Оба выхода, если ваша рабочая копия была изменена.

svnversion добавляет «M» к его выходу. SvnWCRev.exe напечатает текст, который был изменен WC.

0

Эта версия основана на @ 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! 
)