суббота, 1 ноября 2008 г.

Удаленный импорт в Trac

Даже для маленькой компании (или одного разрботчика) необходимы инструменты для организации работы на проектами. Кроме системы контроля версий исходного кода, необходимость которой сегодня не отрицает никто, очень полезны системы учета ошибок (баг-тракинга) и базы знаний (часто на основе Wiki). Очень удачным воплощением всего этого набора инструментов в одном флаконе является Trac.

В интернете можно найти много сервисов предлагающих хостинг этого набора для вас за деньги или даже бесплатно. Одним из иэтих сервисов я и воспользовался около года назад, http://www.assembla.com. Но тут, совсем недеавно, они взяли и поменяли свои условия предоставления услуг – и теперь бесплатно ими можно воспользоваться только для OpenSource проектов. Я не буду акцентировать внимание на таком поведении (но надеюсь, вы все поняли и не будете пользоваться  их услугами ;) ). Я стал искать альтернативы – и нашел похожий сервис, предлагающий бесплатный Trac для закрытых частных проектов – DevjaVu.

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

Если копнуть глубже – Trac хранит свои данные в локальной базе данных SqLite. Так что я имею к ним доступ на свой локальной машине. Если копнуть еще дальше, то у Trac есть огромное число плагинов и расширений, среди который есть XmlRpcPlugin, который позволяет управлять и изменять данные Trac через протокол XML-RPC.

Теперь дело за малым :) Берем .NET в руки, в виде библиотеки XML-RPC.NET, замечательный ORM инструмент Business Logic Toolkit for .NET скомпилированный с дополнительными библиотеками для доступа к SqLite, и вуаля. Читаем из таблиц локальной БД нужную информацию и заливаем её на Trac через XML-RPC. Если кому интересны детали – могу выложит исходники TracImporter (так я его назвал :) ) в открытый доступ.

P.S. Также, во время реализации, я воспользоваля ещё одной фичей библиотеки BLToolkit – Duck Typing (утиная типизация). Очень удобно.