Обновление svn: могу ли я повторить результаты?

Я использую svn в сценарии (файл сценария Windows .cmd).

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

svn checkout --username %username% %SVNURL% %workingfolder%
FOR %%i IN (%workingfolder%\*.*) DO TYPE %%i >> %DESTFILE%

Что я хотел бы сделать для сборок после начальной сборки, так это создать файл «изменения», в который включены только те файлы, которые изменились с момента последней сборки.

Я могу использовать команду svn update вместо проверки, и это дает мне список обновляемых файлов. Справочник по обновлению svn (svnbook.red-bean. ком)

Что я хотел бы сделать, так это повторить этот список результатов обновления svn, найти эти файлы в рабочей папке и скопировать их в файл изменений.


person DannykPowell    schedule 07.12.2009    source источник
comment
Я смущен; вам нужно сделать это через svn update или оформить заказ? Если это обновление, как вы говорите, вы можете получить список и делать с ним, что хотите (я не знаю точно, как в DOS, но ...) Это то, о чем вы спрашиваете: Как это сделать в DOS ? Или как получить список, вообще?   -  person Noon Silk    schedule 07.12.2009
comment
Да, я думаю, как это сделать в DOS, был мой вопрос, извините за путаницу.   -  person DannykPowell    schedule 07.12.2009


Ответы (2)


Вы можете легко найти обновленные файлы:

svn up | findstr /r /c:"^U"

Вы можете перебрать вывод с помощью команды for:

for /f "tokens=2* delims= " %%x in ('svn up ^| findstr /r /c:"^U"') do copy "%%x" change
person Joey    schedule 07.12.2009
comment
Спасибо, прочитал все используемые там команды, в настоящее время пытаюсь заставить это работать: for /f tokens=2* delims= %%x in ('%SVNEExecutable%svn up --username user.name %SVNURL% % procsfolder% ^| findstr /r /c:^U') do ECHO %%x Проблема в том, что %SVNEExecutable% включает пробел в пути (Program Files) и поэтому эта ошибка ("C:\Program" не распознана. ...). Пробовал комментарии вокруг %SVNEExecutable%, но это не работает... в любом случае, я думаю, что ваш ответ правильный, так что спасибо, с благодарностью получена любая дополнительная помощь: как я могу избежать пробела? - person DannykPowell; 07.12.2009
comment
Кавычек вокруг аргумента copy должно быть достаточно. Извините, я забыл их. Однако прямо сейчас я не могу протестировать имена файлов с пробелами, но оператор for должен работать правильно. - person Joey; 07.12.2009

Извиняюсь за ответ на мой собственный вопрос, это тоже лишь частичный ответ, но это то, где я сейчас нахожусь.

Во-первых, проблема с пробелами не только в пути к файлу в %SVNExecutable%, проблема вообще в пробелах в команде.

Способ решения этой проблемы (работает в Windows XP) заключается в использовании переключателя usebackq и использовании обратных кавычек ` вместо обычных кавычек. Используя это, мне удалось заставить работать команду обновления svn:

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder%`) do ECHO "%%x"

Это обновило тестовый файл и из исходного результата обновления:

U    full\path\to\file\file.sql
Updated to revision 36793.
Summary of conflicts:
Skipped paths: 1

Это приводит к результату:

"full\path\to\file\file.sql"
"to"
"of"
"paths:"

Последняя оставшаяся часть головоломки, которую я не могу заставить работать, — это findstr с регулярным выражением. Когда я добавлю это обратно и попробую это:

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder% ^| findstr /r /c:"^U"`) do ECHO "%%x"

Я получаю эту ошибку:

The filename, directory name, or volume label syntax is incorrect.

Был в раздумьях, начинать ли это как новый вопрос, теперь я отметил этот вопрос как ответ ... в любом случае, вся помощь с благодарностью получена

person DannykPowell    schedule 07.12.2009