2012-02-15 2 views
12

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

  1. Есть ли способ получить список репозиториев с сервера (помимо анализа HTML)?
  2. Есть ли способ получить информацию, например, теги, ветви и т. Д. Об одном из хранилищ, без фактического клонирования?

ответ

11

Нет, Mercurial разработан таким образом, что вам нужен репозиторий местного для почти всех команд. Только встроенная команда, которая даст вам информацию о удаленном хранилище является hg id:

$ hg id https://bitbucket.org/aragost/javahg/ 
3b2711b26dbd 

Чтобы раздобыть больше информации вы можете иногда эксплуатируют raw шаблон для hgweb:

$ wget -q -O - 'https://www.mercurial-scm.org/repo/hg/tags?style=raw' | head 
tip  a3a36bcf122e2ea4edbbe4ac44da59446cf0ee07 
4.2.1 c850f0ed54c1d42f9aa079ad528f8127e5775217 
4.2  bb96d4a497432722623ae60d9bc734a1e360179e 
4.2-rc 616e788321cc4ae9975b7f0c54c849f36d82182b 
4.1.3 77eaf9539499a1b8be259ffe7ada787d07857f80 
4.1.2 ed5b25874d998ababb181a939dd37a16ea644435 
4.1.1 25703b624d27e3917d978af56d6ad59331e0464a 
4.1  e1526da1e6d84e03146151c9b6e6950fe9a83d7d 
4.1-rc a1dd2c0c479e0550040542e392e87bc91262517e 
4.0.2 e69874dc1f4e142746ff3df91e678a09c6fc208c 

Это требует что хост запускает сценарий CGI hgweb, который поставляется с Mercurial. Для сайта, такого как Bitbucket, вам нужно будет использовать their API.

Наконец, если вы можете включить расширения в удаленном репозитории, тогда можно написать расширение, которое предоставляет информацию, которую вы хотите, в разборном формате. Однажды я написал such an extension в качестве демонстрации.

+0

Просто для того, чтобы было понятно, что он действительно не работает не локально, что-то вроде 'hg tip --repository https: // bitbucket.org/aragost/javahg /' будет терпеть неудачу; 'abort: репозиторий 'https://bitbucket.org/aragost/javahg/' не является локальным. –

+0

@ChrisMorgan: да, почти все команды будут терпеть неудачу, когда вы передадите удаленное репо на флаг '--repository'. Только «hg id» и «hg outgoing» будут запрашивать удаленные репозитории (довольно ограниченным образом). –

+0

Спасибо за четкий ответ :) –

Смежные вопросы