Одежка для Subversion - ViewVC и SVNSearcher

Материал из CustisWiki
Перейти к: навигация, поиск

Презентацию можно увидеть здесь.

Abstract (English)

Dressing Subversion: ViewVC and SVN-Searcher

Vitaly Filippov

Customized InformSystems

email: filippov@custis.ru

Subversion, a mainstream, free and open-source version control system, is now used in many companies. It is, by now, the triumph of evolution of the centralized version control systems. However, the great part of its potential is often left undiscovered. Whereas Subversion is thought of as a «some tool for programmers» and is used only for storing source code and only to provide concurrent work on it, it’s impossible to effectively search across the repository (even not speaking of searching across the history) or get answer to questions like «why these changes were made?» using Subversion’s assistance. The means of Web-navigation across repositories, files and revisions are also very poor; for example, nobody can perform passive monitoring of repository using some kind of subscriptions (for example, to changes of critical files). In fact, due to these reasons, the Subversion repository knocks off the corporate knowledge base, and its features are not used by the «not-programmers» (HR, marketing and other infrastructure departments) for example, for storing documents.

We propose using two free and open-source systems — ViewVC and SVNSearcher — to fill these gaps and freely turn your SVN repositories into a part of corporate knowledge base with effective search, Web navigation and RSS subscriptions.

Keywords: ViewVC, SVNSearcher, Subversion, Knowledge management, Version Control Systems.

Аннотация

Одежка для Subversion: ViewVC и SVN-Searcher

Виталий Филиппов

Заказные ИнформСистемы

filippov@custis.ru

Во многих компаниях используется общеизвестная система управления версиями Subversion — бесплатная и с открытым исходным кодом, представляющая собой венец эволюции централизованных систем контроля версий. Однако, зачастую большая часть потенциала Subversion остается нераскрытой. На Subversion смотрят, как на «какой-то инструмент для программистов», и он используется только для хранения программного кода и исключительно для обеспечения конкурентной работы. При этом его невозможно использовать для эффективного и целостного ответа на вопросы — «Почему сделаны эти изменения?» или эффективно искать по репозитарию, даже без учета временного измерения, то есть поиска по ревизиям. Достаточно бедна веб-навигация по репозитарию — по структуре файлов и ревизиям, нет возможностей пассивного мониторинга — подписок на изменения (например, критически важных файлов). По сути, из-за всего этого репозитарий компании выпадает из корпоративной базы знаний, плюс, возможности Subversion не используются для «не программистов» (HR, маркетинг, и других инфраструктурых подразделений) — например, для хранения документов.

Мы предлагаем использовать свободные системы с открытым кодом — ViewVC и SVNSearcher — чтобы заполнить эти пробелы, и бесплатно превратить SVN-репозитарий в часть корпоративной базы знаний с эффективным поиском, веб-навигацией и RSS-подписками.

Keywords: ViewVC, SVNSearcher, Subversion, Управление знаниями, Управление версиями

Введение

Использование систем контроля версий стало неотъемлемой частью культуры разработки ПО с момента появления первой такой системы — SCCS в 1972 году. Системы контроля версий обеспечивали экономичное хранение полной истории изменений и эффективную командную работу, выполняя быстрый и удобный обмен изменениями между членами команды.

До недавнего времени централизованные системы контроля версий были единственной моделью многопользовательской работы, вся история изменений хранилась в централизованном хранилище — репозитарии системы контроля версий, а пользователи выполняли операции выборки последней или определенной ревизии из репозитария в локальные копии (workspaces), и наоборот, публиковали свои изменения в общий репозитарий.

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

А самой распространенной централизованной системой управления версиями является Subversion — по сути дела, являющаяся вершиной эволюции централизованных систем контроля версий. Эта система была разработана как «исправление всех проблем» предыдущего лидера — системы CVS и, можно сказать, достигла своей цели — «свергнуть» CVS (игра слов — Subversion на английском языке означает «свержение») и стать лучшей из централизованных систем контроля версий. Subversion — бесплатная система с открытым исходным кодом, к тому же максимально совместимая по командам и концепциям с CVS (legacy-лидером c двадцатилетней историей), благодаря чему она достигла широчайшего распространения — регулярные опросы, проводимые на конференциях, в журналах и IT-порталах, неизменно называют Subversion современным лидером среди систем управления версиями. В общем, неудивительно, что SVN («прозвище» Subversion) можно обнаружить в большинстве компаний-разработчиков ПО.

Проблема

К сожалению, часто получается так, что большая часть потенциала Subversion остается нераскрытой. На Subversion смотрят, как на «какой-то специальный инструмент для программистов», и он используется для хранения только программного кода и исключительно для обеспечения конкурентной работы. То есть его используют только кодирующие программисты, используют практически на «автомате», как средство слияния с чужими изменениями, публикации своих правок, и изредка, чтобы с трудом покопаться в истории изменений. А все «некодирующие» сотрудники, включая даже менеджеров проектов, если они сами не занимаются кодированием, не используют Subversion даже для мониторинга работы сотрудников, например, для быстрых ответов на такие вопросы, как «Почему, в рамках какой задачи или для исправления какой ошибки, сделаны эти изменения?», «Какие изменения сделаны для исправления этой ошибки?». Да и вообще, нельзя эффективно искать в репозитарии, даже по актуальному срезу, не говоря уже о «поиске по истории» (то есть по прошлым версиям), поиске по документам в офисных форматах (а не по плоскому тексту программных кодов), или поиске с морфологией (например, с учетом русскоязычных словоформ). Даже «без документов», поиск по коду и комментариям в нем, не только предоставляет удобный поиск потерянного «в пространстве или времени» функционала, но и реально мотивирует писать разумные комментарии, правильно именовать программные структуры (ведь по всему этому кто-то потом сможет искать) и в целом, способствует улучшению качества кода.

Далее, хотя веб-навигация по репозитарию (по структуре файлов и ревизиям) и возможна в случае использования интегрированной с веб-сервером Apache инсталляции сервера Subversion, она достаточно ограничена и не имеет никаких возможностей пассивного мониторинга. Например, нет подписок на изменения, с помощью которых опытные программисты могли бы отслеживать изменения в критических модулях системы.

По сути, из-за всего этого возникает парадоксальная ситуация — репозитарий, являющийся основным местом приложения усилий для компании-разработчика, не является частью корпоративной базы знаний; возможности Subversion не используются для «не-программистов», число которых велико даже в софтверной компании — это отделы кадров, маркетинга и других инфраструктурых подразделений. А они вполне могли бы использовать его возможности, хотя бы для целостного хранения документов со всей историей и эффективного поиска по ним.

Иллюстрация 1: Интеллектуальная карта (MindMap) по Проблеме

В результате преимущества централизованного репозитария даже не осознаются, и «предоставленные сами себе» программисты мигрируют на распреденные системы контроля версий, где каждый — «царь и бог» в своем собственном репозитарии, или вовсе манкируют управлением версиями, менеджеры так и не используют возможности мониторинга изменений в коде для наблюдения за ходом проекта, а для хранения документов все «непрограммисты» используют, в лучшем случае, файлопомойку на общем сетевом диске или дорогую специализированную «систему управления документооборотом».

А ведь все эти возможности -

  • Документооборот: хранение всех версий документов, показ изменений, совместное редактирование, гибкое назначение прав на просмотр/редактирование;
  • Полнотекстовый поиск, с учетом русской морфологии, по программному коду и документам в офисных форматах, причем как «в ширину» — то есть по всей файловой структуре репозитория, так и «в глубину» — то есть по всем ревизиям;
  • Быстрые ответы на вопросы «что и кем было сделано за такой-то срок по такому-то багу», «что сейчас меняется по такой-то задаче» (слежение), «сгенерируй патч (изменения) чтобы послать заказчику для исправления этой ошибки», то есть, связь изменений с проблемами;
  • Дружелюбная работа через веб-интерфейс, просмотр структуры папок и ревизий, синтаксическая раскраска кода и т. п.

Возможны к реализации с помощью Subversion! Причём, чтобы «пробудить» эти «спящие» возможности, сегодня требуется совсем немногое — а именно, установка пары бесплатных, свободно доступных систем с открытым исходным кодом, о которых мы вам в дальнейшем и расскажем.

ViewVC

На самом деле, идея предоставить веб-интерфейс к репозитарию исходных кодов далеко не нова. Например, в нашей компании более десятка лет использовалась система управления версиями CVS, и к ней был установлен Bonsai — разработка проекта Mozilla, веб-интерфейс с возможностью быстрого поиска по всем атрибутам изменений, включая комментарии к коммитам.

К сожалению, когда мы, вместе со всем развитым миром, стали мигрировать проекты на Subversion, оказалось, что в обозримое время ждать поддержки Bonsаем SVN-а не стоит. Задача осложнялась еще и тем, что часть legacy-проектов мы решили оставить на CVS, чтобы не нарушить сложившиеся, весьма специфические процессы поддержки и пронесения изменений. Таким образом, нам требовалась новая система веб-доступа и поиска по репозитариям, поддерживающая как SVN, так и CVS (ибо несколько систем для одного функционала критически затрудняет использование). Такой системой оказалась ViewVC.

ViewVC — веб-интерфейс для систем контроля версий, система, ранее называвшаяся ViewCVS, зародилась фактически как Bonsai, переписанный с Perl’а на Python. Вместе с добавлением поддержки Subversion буквы «CVS» в названии сменились на «VC», что означает «Version Control», то есть, что система потенциально нацеливается на поддержку многих систем контроля версий. В разработке ViewVC участвует (если не сказать — лидирует) C. Michael Pilato, автор книги «Управление версиями в Subversion» и один из ключевых разработчиков самого Subversion.

Основные функции ViewVC — просмотр листингов директорий; просмотр журналов ревизий с комментариями (log); просмотр различий между версиями, в том числе вывод патчей; аннотирование (поиск виновного) в файлах (кто менял строку…) и директориях (кто менял файл…); просмотр содержимого файлов с подсветкой синтаксиса; поиск изменений в базе данных, в том числе по тексту комментария; RSS-ленты изменений по репозитариям, файлам, каталогам, а также результатам любых поисков.

Иллюстрация 2: ViewVC — просмотр различий в файле

Кстати, внедрение ViewVC послужило хорошим толчком и для отказа от старой версии CVS, к тому же обросшей за время использования некоторыми патчами, например, для поддержки разграничения доступа на уровне файлов и каталогов, и для замены её на CVSNT. К сожалению, оказалось, что хотя CVSNT сейчас и является мэйнстрим-версией CVS, в смысле возможностей (сама по себе лучше древнего cvs’а, и также является открытой и свободной), но хозяин подкачал: компания «Мартовский Заяц» («March Hare Software»), разрабатывающая CVSNT, не позволяет даже отправлять отчёты об ошибках, коих в коде CVSNT достаточно, никому, кроме платных пользователей. А в исходных кодах свободной версии клиента присутствует сообщение «Вы используете бесплатную версию …», добавляемое автоматически в каждый комментарий к вносимым изменениям. Итог — пара найденных ошибок исправлена собственноручно, сообщение о бесплатной версии с позором удалено из кода, а мы решили, что в будущем займёмся окончательным переводом всех проектов на Subversion.

Иллюстрация 3: Сообщения о бесплатности версии в коде CVSnt

Любопытно, кстати, что одной из новых возможностей CVSNT по сравнению с CVS является как раз введение отдельного свойства изменения — номер проблемы (бага). То есть именно то, о чём писалось выше — связь изменений с проблемами. Возможность логичная, но ненужная: все наши коллеги уже очень давно привыкли указывать номер проблемы (бага) в тексте комментария к каждому изменению в форме «Bug XXXXX».

Иллюстрация 4: Интеграция Bugzilla и ViewVC

Таким образом, проблема связи с багом в нашем случае решается очень просто — с помощью полнотекстового поиска по комментариям к коммитам, и ссылки «Look for Bug in CVS/SVN» в системе управления багами. Такой способ является очень простым и эффективным, а также кросс-системным, о чём иногда можно судить даже по результатам поиска — бывает, что изменения по одному и тому же багу вносятся и в CVS, и в Subversion — а ViewVC всё равно находит их все. Аналогично происходит со старыми проектами, перенесёнными на Subversion, но части которых вместе с историей остаются в CVS для обеспечения совместимости.

В оригинале ViewVС не имеет поддержки «настоящего» полнотекстового поиска по специальному индексу, но так как выборка изменений происходит из MySQL-базы данных, реализуется он совершенно примитивно. Патч для его поддержки мы уже отправили на баг-трекер и список рассылки ViewVC, и надеемся, что в будущем он будет включён в основную ветку. Аналогично дело обстоит и с другими мелкими доработками ViewVC, например, с генерацией патчей из результатов поиска. Это, кстати, и решает вторую часть проблемы — даёт возможность показа, отправки изменений заказчику, или, например, их отмену.

ViewVС даёт и следить за критическими участками кода (и не только критическими) — везде, где возможно, присутствует привычная рыжая иконка RSS, кликнув по которой, можно установить слежение за просматриваемым файлом, каталогом, репозитарием, или своим фильтром (результатами поиска).

ViewVC поддерживает и фильтрацию вывода в зависимости от прав пользователей, причём, во-первых, используется «шпионская» схема — без сообщений «доступ запрещён», а просто с молчаливым сокрытием информации, как будто её там никогда и не было; а во-вторых, схема авторизации расширяемая, и по умолчанию авторизация возможна на основе стандартных SVN-файлов настройки авторизации authz, а с дополнительным «модулем-авторизатором» (который, опять-таки, пока что можно взять на трекере, а в будущем — надеемся, в trunk’е) — и стандартную схему разграничения прав по CVSNT ACL.

Встроенных средств аутентификации ViewVC не содержит, а получает имя текущего пользователя из переменной окружения REMOTE_USER, что даёт широкие возможности настройки собственных методов аутентификации.

А ещё ViewVC оказалось удобно использовать на Scrum-демонстрациях. И ещё одна идея применения — Code Review. Всё это удобно именно благодаря простой веб-навигации по изменениям и версиям.

Интерфейс: простейший по умолчанию, довольно тихий. Тем не менее, у стандартного интерфейса есть один неоспоримый плюс — абсолютная простота и отсутствие визуального шума. Если же он чем-то вас не устраивает, он легко настраивается выбором или созданием специальных шаблонов. Примеры настроенных интерфейсов можно видеть и в сети, где ViewVC уже используется достаточно широко.

ViewVC используют такие проекты, как SourceForge.net, Apache Software Foundation, Gentoo Linux, проекты Google (например, Chrome) и многие другие.

Иллюстрация 5: ViewVC на SourceForge.net
Иллюстрация 6: ViewVC на http://svn.jejik.com/

SVNSearcher

После установки ViewVC мы решили не останавливаться на достигнутом в области «одевания» Subversion, и попробовать приспособить его для поиска по содержимому файлов, в то время как ViewVC даёт возможность поиска только по комментариям к изменениям.

Из всех существующих систем поиска по Subversion была выбрана наиболее рабочая — SVNSearcher — хоть и написанная на Java — система. Выбор языка, кстати, объясняется очень просто: на Java существует замечательная библиотека полнотекстового поиска, написанная коллегами из Apache Software Foundation — Apache Lucene, которую и использует в SVNSearcher.

Из использования Lucene сразу следует и поддержка офисных документов, и PDF, и русскоязычная морфология — всё это давно разработано, остаётся только подключить.

Иллюстрация 7: SVNSearcher — результаты поиска

SVNSearcher ведёт поиск по всем ревизиям всех файлов, находящихся под управлением Subversion, с учётом прав доступа — аналогично ViewVC, здесь поддерживаются стандартные authz-файлы Subversion. Следует отметить и недостаток фильтрации — при больших количествах находимых файлов производимая сразу по всему набору фильтрация приводит к существенному снижению производительности. Решение здесь может быть простое — фильтровать только то, что показывается пользователю, а не весь набор найденных документов сразу. Однако это исправление пока что оставлено на реализацию авторам.

SVNSearcher поддерживает и дополнительные атрибуты поиска — тип файла, поиск по части репозитория и т. п.

Также SVNSearcher обладает достаточно высокой производительностью. Хотя это, скорее, заслуга поискового движка, на котором он основан, то есть, заслуга Lucene. Как пример — индексация всех наших репозиториев заняла приблизительно трое суток, на обычной офисной машине с двухъядерным Core 2 Duo и обычным SATA жёстким диском.

Как известно, Subversion-репозитории в случае использования DAV-модуля Apache можно подключать как веб-папки стандартными средствами Windows, и настроить автоматическую фиксацию изменений, что может иметь простое применение — заставить «не-программистов» просто класть документы на специальный диск гораздо проще, чем заставлять их выполнять вручную commit, да ещё и писать комментарии к нему. Правда, «стандартные средства» Windows постоянно меняются и их использование может быть сопряжено с определёнными проблемами — например, проблемами с блокировками, или при использовании последних версий офисных программ с дизайном в стиле медиа-плееров от всеми известной корпорации, в которых воскресают старые баги, как раз относящиеся к работе через DAV.

Таким образом SVNSearcher помогает решить последнюю проблему — документооборот, отказ от файловой помойки и целостное хранение документов с полной историей изменений.

Заключение

Итак, мы рассказали, как использовать свободные системы с открытым кодом — ViewVC и SVNSearcher, чтобы решить проблемы, поставленные в начале статьи, и совершенно бесплатно получить из SVN-репозитария полноценную часть корпоративной базы знаний, с эффективным поиском, веб-броузингом и RSS-подписками. И это не пустые теоретические соображения — все, о чем рассказано в статье, проверено практикой использования в нашей компании.


Внимание! Данная статья выбрана для репликации во внешнюю базу знаний компании. Пожалуйста, не допускайте в этой статье публикацию конфиденциальной информации, ведения обсуждений в теле статьи, и более ответственно относитесь к качеству самой статьи — проверяйте орфографию, пишите по-русски, избегайте непроверенной вами информации.