2012-02-15 17 views
12

Hace unos días comencé a experimentar con Mercurial, y todo fue genial, hasta que decidí intentar escribir un pequeño programa, que obtiene la lista de repositorios y listas de identificadores de conjuntos de cambios para cada repositorio desde un servidor remoto, le permite al usuario seleccionar repositorio y conjunto de cambios, clonarlo y actualizarlo a la revisión elegida. Esto llevó a dos preguntas:Mercurial: obtenga información sobre repositorios sin clonarlos

  1. ¿Hay alguna manera de obtener una lista de repositorios del servidor (además de analizar HTML)?
  2. ¿Hay alguna forma de obtener información, como etiquetas, ramas, etc. sobre uno de los repositorios, sin clonar primero?

Respuesta

11

No, Mercurial está diseñado de manera que se necesita un repositorio local de para casi todos los comandos. El único comando integrado que le dará información sobre un repositorio remoto es hg id:

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

Para conseguir más información a veces se puede explotar la plantilla raw para 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 

que requiere que el host ejecuta el script CGI hgweb que viene con Mercurial. Para un sitio como Bitbucket necesitaría usar their API.

Finalmente, si puede habilitar extensiones en el repositorio remoto, entonces es posible escribir una extensión que expone la información que desea en un formato analizable. Una vez escribí such an extension como una demostración.

+0

Simplemente para aclarar que realmente no funciona de forma no local, algo como 'hg tip --repository https: // bitbucket.org/aragost/javahg /' fallará; 'abort: repository 'https://bitbucket.org/aragost/javahg/' no es local'. –

+0

@ChrisMorgan: sí, casi todos los comandos fallarán así al pasar un repositorio remoto al indicador '--repository'. Solo 'hg id' y' hg outgoing' harán consultas a repositorios remotos (de forma bastante limitada). –

+0

Gracias por una respuesta clara :) –

Cuestiones relacionadas