Как получить рекурсивный отчет svn blame в одном XML-файле для всех недвоичных файлов в ветви? - PullRequest
2 голосов
/ 05 января 2009

Как я могу получить полностью рекурсивный отчет svn вины для всех недвоичных файлов в ветви, где выходные данные находятся в одном файле в формате xml и включают в себя ревизию, дату, автора, имя файла и путь, а также текст строка самого файла? Весь вывод должен быть в одном файле. Он будет выполнен как часть сборки через экземпляр CCNet.

Доступными инструментами являются последний стабильный выпуск nant и nantcontrib, msbuild и последняя версия командной строки svn.

Вот некоторые из проблем, с которыми я столкнулся: Командная строка Команда svn blame не поддерживает рекурсию каталога. Параметр Blame --xml не включает фактический текст каждой строки, хотя в нем есть все остальное. По умолчанию nantcontrib передает параметр --quiet (в отличие от ссылки на задачу), который не поддерживается в команде blame. Задача svn Nantcontrib может не принять параметр --xml.

Ответы [ 2 ]

2 голосов
/ 06 января 2009

Простой ответ - нет простого способа сделать это. Лучший, самый правильный способ - написать собственный svn-клиент (или расширить существующий), чтобы он обладал необходимыми вам функциями. Вряд ли тривиально.

Существует также неправильный способ сделать это, который также включает в себя написание кода. Не делай этого :

find . -type f | grep -v .svn | xargs svn blame > line_data
find . -type f | grep -v .svn | xargs svn --xml blame > xml_data

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

К сожалению, я думаю, что это степень поддержки того, что вы хотите со стандартным клиентом SVN, и я не могу найти других клиентов, которые делают вещи лучше (некоторые даже не поддерживают blame).

1 голос
/ 15 января 2009

Я не знаю, какую ОС вы используете. Но вы можете попробовать использовать простой цикл FOR и команду "svn ls -R", чтобы рекурсивно вывести список всех файлов в вашей ветви (workspace / url), а затем направить его в "svn blame --xml".

Я опробовал это в командной строке SVN, и она отлично работает (Windows XP, SVN 1.4.4). Команда, которую я использовал, выглядит следующим образом:

FOR / F "usebackq delims =="% i IN (svn ls -R http://myurl/mybranch) DO @svn обвиняют --xml% i

Примечание. Вы можете избежать некоторых ошибок типа "url not found", если вы введете эту команду в рабочей области (отражающей корень ветки) и используете 'svn ls -R` вместо url в приведенной выше команде.

Надеюсь, это поможет.

...