RSS from Subversion (SVN)

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

Поиск


В нашей глобальной сети можно найти массу полезного по тревожащему меня вопросу. Например есть сравнительный анализ различных SVN-вьюверов.
Конечно можно воспользоваться ими, но, к сожалению нет среди них полностью Java-based утилит. А всё это в ближайшем будущем надо будет интегрировать с LDAP сервером... Надо делать RSS самому.
Как это делать написано здесь, но ещё не плохо и протестировать своё творение тут
Всё вроде просто, но как получить желаемый XML?

Идея 1


Первая пришедшая мне в голову мысль поставила меня на ложный путь - я решил воспользоваться hook скриптами. Это не верный ход! Их назначение - лишь подменять свойства файлов. Далеко я так не ушёл, но опыт получилю.

Идея 2


Вторая идея оказалась плодотворнее - Google. Там я отыскал вот такую статейку. В ней доходчиво объясняют английским почёрному, что можно воспользоваться и средствами винды, коли уж такая у нас есть. Оказывается команда svn log с соответствующими параметрами выдаёт довольно приятного вида XML-file. Для его приведения в RSS-XML остайтся лишь подправить найденный шаблон. Это оказалось сложнее всего. Но результат этого дела можно увидеть прямо сейчас - Creator.xls.

Обсуждение результата


Конечно, внимательный читатель, просмотрев этот файл, обнаружит там следующее <xsl:value-of select="/log/svn-url"/>. Что вы, возопит он, команда svn -v --xml --limit 100 log не выдаёт такого! И будет он прав, ведь я использую команду с ещё одним параметром - --incremental она выдаёт только тэги logentry. Окружая вывод этой команды содержимым header.txt и footer.txt можно добиться желаемого результат (вы догадались, что странный тэг находится в header.txt :) ).

Окончание


А дальше пишем батник и обычным Saxon-ом получаем результат, превосходящий ожидания. Батник ставим в расписанные задачи (Sheduled Task) и наслаждаемся новым ощущением свободы - теперь вы можете своевременно остановить товарища по команде, увидев ошибки в его коммитах.
Надеюсь это будет полезно хоть кому-нибудь :)
Tags: , , , ,

Comments have been disabled for this post.