Как реализовать /svn -history/path, как Google Code Hosting?

Когда вы публикуете репозиторий Subversion через Apache Httpd, у вас есть бонусная функция: вы можете просматривать ревизию HEAD ваших источников с помощью любого HTTP-клиента.

Например, у нас есть этот репозиторий:

http://trash-cli.googlecode.com/svn/trunk/

С любым HTTP-клиентом (например, Firefox) вы можете просматривать файлы в редакции HEAD. Svnbook очень хорошо объясняет, как это сделать.

Но хостинг Google Code предлагает дополнительную функцию: вы можете просматривать прошлые версии. Например, вы можете просмотреть версию r10:

http://trash-cli.googlecode.com/svn-history/r10/trunk/

Вы знаете, как Google это делает? Я хочу эту функцию и в моем репозитории моей компании!:)

Спасибо

Обновление 1

Следующее поведение может помочь нам решить проблему. Если я посещу путь, который не существует в репозитории, например

http://trash-cli.googlecode.com/svn-history/r10/non-existent

Я получил следующую ошибку 404:

Не найдено

Запрошенный URL /svn/! svn/bc/10/не существует найденных на этом сервере.

Я подозреваю, что в сценарии есть правило перезаписи URL.

Обновление 2

Обратите внимание, что это не то же самое, что этот вопрос. Я хочу показать эту службу в репозитории моей компании таким образом, который удобен для пользователя таким образом, что Google Code делает, мне неинтересно, как получить старую ревизию во внешнем репозитории, у которого нет этой функции. Я использую перспективу поставщика услуг, а не перспективу пользователя. Я хочу облегчить жизнь моим коллегам.

Ответ 1

Из примечания о выпуске subversion 1.6:

Новый публичный 'исторический' синтаксис URI HTTP для mod_dav_svn (сервер)

mod_dav_svn теперь поддерживает новую публикацию Синтаксис URI для изучения версии файлов или каталогов. Цель состоит в том, чтобы позволить пользователям изучать историю без использования svn, а также упростить Сторонние инструменты (например, проверка кода услуг) для непосредственной работы хранилища без использования svn библиотеки.

http://host/repos/path?[p=PEG][&r=REV]

Ответ 2

Я считаю, что базовая установка (из команды SubVersion) не поставляется с этой функцией из коробки. Я считаю, что люди создали встроенные расширения или программы поверх или в сочетании с клиентом Subversion, чтобы получить эту функцию.

Если вы запустите репозиторий, вы, вероятно, можете установить WebSVN (http://websvn.tigris.org/), чтобы получить то, что вам нужно. Я уверен, что есть другие варианты.

Ответ 4

Я изучил документы Apache, и я думаю, что это можно было бы решить, используя это правило в httpd.conf.

RewriteRule ^/svn-history/r([0-9]+)/(.*) /svn/!svn/bc/$1/$2

Я еще не тестировал это. Я проверю его позже.