Файловый протокол Mercurial

есть ли у Mercurial HTTP-протокол, по которому мы могли бы просматривать файлы/папки/ветки вместо клонирования/извлечения наборов изменений?

Я видел что-то, использующее TortoiseHG WebServer и доступ к http://localhost:8080/ с помощью браузера, но обслуживается совершенно другой HTML когда вы используете проект на https://bitbucket.org/ (по крайней мере, я не смог найти такое же представление).

Обновить документ HttpCommandProtocol описывает только наборы изменений, но не файлы/папки. Итак, задача состоит в том, чтобы загрузить несколько файлов только для конкретной ревизии (например, с подсказкой «стабильная») и список файлов. Однако я не хочу загружать для этого полный репозиторий.

Протоколы, отличные от HTTP, приветствуются, но условия те же: не загружайте полный репозиторий.

Обновление 2 hgweb обслуживает статический HTML и файлы. Это всегда один и тот же HTML-код для разных версий hgweb? А как насчет bitbucket.org? Есть ли общий протокол?


person Sergey Shandar    schedule 19.02.2011    source источник


Ответы (3)


Как вы уже заметили, HttpCommandProtocol определяет обмен информацией о репозитории и наборами изменений — он гарантирует, что вы можете клонировать/отправлять/извлекать из/в любой репо, обслуживаемый HTTP. Но, насколько мне известно, не существует стандарта для просмотра репозитория (например, получения одного файла определенной версии).

Вам придется адаптироваться к любой схеме URL, которую использует выбранная вами хостинговая система (как вы также заметили, hgweb и bitbucket имеют разные схемы). В зависимости от вашего варианта использования вы можете определить свой собственный протокол доступа к файлам и передать его конвертеру.

Например, вы можете получить доступ к файлам с помощью этой схемы:

<repo-url>/<rev>/<path>

Где <repo-url> — это URL-адрес, который вы используете для клонирования/проталкивания/вытягивания. На практике вы должны использовать такие URL-адреса:

https://bitbucket.org/user/repo/<rev>/<path>
https://hgwebhost.org/.../repo/<rev>/<path>

Очевидно, что это виртуальные URL-адреса, которых не существует. Вот тут-то и пригодится ваш конвертер: проверьте тип системы хостинга и соответствующим образом преобразуйте URL-адреса:

https://bitbucket.org/user/repo/raw/<rev>/<path>
https://hgwebhost.org/.../repo/raw-file/<rev>/<path>

Если ваш преобразователь знает bitbucket и hgweb, то он уже работает с большим количеством репозиториев.

person Oben Sonne    schedule 27.02.2011
comment
Знаете ли вы какую-либо документацию по статическим HTML-кодам hgweb и bitbucket? А на других хостингах код.гугл, ассембла, СФ и т.д.? - person Sergey Shandar; 28.02.2011
comment
Какую информацию вы ищете в документации? Разве вы не можете просто просмотреть примеры проектов на разных хостингах и проверить, какой шаблон URL они используют? - person Oben Sonne; 28.02.2011
comment
Я имею в виду документацию о формате обслуживаемых HTML-страниц. Меня больше интересует клиентская сторона. Например, программа, которая просматривает удаленные репозитории Mercurial и создает отчет, не загружая полные репозитории. - person Sergey Shandar; 01.03.2011
comment
Вы хотите проанализировать HTML-страницы, чтобы угадать систему обслуживания (hgweb, ...), а затем соответствующий шаблон URL? Я ожидаю, что шаблоны URL будут стабильными, но я не думаю, что это верно для формата реальных HTML-страниц (нет веской причины). Я бы предположил шаблоны URL-адресов на основе доменных имен (да, вам придется вести список) и вернулся бы к шаблонам URL-адресов hgweb для неизвестных доменов. Не зная, что вы на самом деле хотите сделать, трудно сделать лучшие предложения. - person Oben Sonne; 01.03.2011
comment
@Обен. Спасибо. Ты прав. Я хотел бы проанализировать HTML для списка файлов, потому что похоже, что нет другого способа получить эту информацию без загрузки полного репо. Да, для разных хостингов репо будет разный способ анализа HTML (по умолчанию hgweb). Я просто подумал, что есть более надежное решение. :-( - person Sergey Shandar; 02.03.2011
comment
Если вы все равно хотите проанализировать код, надежным решением будет клонировать репозиторий и работать исключительно с кодом вместо того, чтобы иметь дело с промежуточным html-слоем. - person jamessan; 03.03.2011
comment
Я согласен с @jamessan. Вы можете сохранить последние использованные репозитории n в кеше, поэтому вам не нужно часто клонировать их, просто обновите их перед доступом к файлам в них. Конечно, это требует, чтобы hg был установлен в системе загрузки - как я уже говорил ранее, здесь может быть полезно знать, над каким приложением вы на самом деле работаете. - person Oben Sonne; 03.03.2011

У Mercurial есть hgweb. Его можно развернуть через любой контейнер wsgi, и я думаю, что он даже поддерживает CGI.

person Jeremy Whitlock    schedule 19.02.2011
comment
Насколько я понял из HttpCommandProtocol, он обслуживает в основном наборы изменений. Но как насчет файлов и папок? - person Sergey Shandar; 19.02.2011
comment
Я думаю, вы неправильно понимаете. hgweb — это полноценный HTTP-сервер Mercurial и браузер хранилища. Это способ создания ртутного сервера на основе http. - person Jeremy Whitlock; 19.02.2011
comment
Я думаю, что hgweb — это то, что я вижу на своем локальном хосте, когда запускаю TortoiseHg WebServer. Однако работает ли тот же сервер/протокол на bitbuket.org? Как я уже говорил, похоже, что bitbucket.org обслуживает совершенно другой HTML. Означает ли это, что hgweb не является частью стандартного протокола mercurial? - person Sergey Shandar; 19.02.2011
comment
HGweb является частью пакета Mercurial, он может работать автономно или как CGI-скрипт под другим веб-сервером (например, Apache) для обслуживания нескольких репозиториев. Bitbucket написал собственный веб-сервер поверх Mercurial, который также включает в себя вики, отслеживание проблем и функции загрузки. - person Ton Plomp; 19.02.2011
comment
Спасибо, @Ton. Значит, нет общего протокола для просмотра файлов? - person Sergey Shandar; 19.02.2011

Если вы просто зайдете в любой репозиторий hg и наберете

hg serve

у вас будет веб-сервер, прослушивающий URL-адрес, на который вы можете указать браузер. Форматирование веб-страниц, созданных hg, можно изменить с помощью шаблонов. Вполне вероятно, что у bitbucket.org есть свои собственные более привлекательные шаблоны, поэтому у них более красивые веб-страницы.

Кроме того, URL-адрес прослушивания можно использовать для отправки и извлечения, а также с помощью hg. На самом деле это тот же веб-сайт, который передается через hgweb.cgi, а также базовый механизм для выполнения push/pull через SSH.

person roshanjames    schedule 02.03.2011
comment
Вы знаете, где я могу найти документацию или исходный код для этих шаблонов? - person Sergey Shandar; 03.03.2011
comment
Это зависит от того, как hg установлен в вашей системе. В моей системе они есть в папке /usr/share/mercurial/templates. Для каждого шаблона есть каталог. Кроме того, если вы посмотрите документацию для hgweb.cgi, вы увидите, как настроить его для выбора любого конкретного шаблона. - person roshanjames; 03.03.2011