Подтвердить что ты не робот

Mercurial: получить информацию о репозиториях без клонирования

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

  • Есть ли способ получить список репозиториев с сервера (помимо анализа HTML)?
  • Есть ли способ получить информацию, например, теги, ветки и т.д. об одном из репозиториев, фактически не клонируя его первым?
4b9b3361

Ответ 1

Нет, 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

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

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