2012-02-15 21 views
12

Pochi giorni fa ho iniziato a sperimentare con Mercurial, e tutto è andato alla grande, fino a quando ho deciso di provare a scrivere un piccolo programma, che ottiene l'elenco di repository e gli elenchi di ID changeset per ciascun repository da un server remoto, consente all'utente di selezionare repository e changeset, clonarlo e aggiornarlo alla revisione scelta. Ciò ha portato a due domande:Mercurial: ottieni informazioni sui repository senza clonarli

  1. C'è un modo per ottenere un elenco di repository dal server (oltre a parsing HTML)?
  2. C'è un modo per ottenere informazioni, come tag, rami, ecc. Su uno dei repository, senza effettivamente clonarlo prima?

risposta

11

No, Mercurial è progettato in modo che avete bisogno di un repository locale per quasi tutti i comandi. L'unico integrato di comando che vi darà informazioni su un repository remoto è hg id:

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

Per entrare in possesso di ulteriori informazioni a volte è possibile sfruttare il modello raw per 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 

che richiede che l'host stia eseguendo lo script CGI hgweb fornito con Mercurial. Per un sito come Bitbucket è necessario utilizzare their API.

Infine, se è possibile abilitare le estensioni sul repository remoto, è possibile scrivere un'estensione che espone le informazioni desiderate in un formato analizzabile. Una volta ho scritto such an extension come demo.

+0

Giusto per rendere più chiaro che in realtà non funziona in modo non locale, qualcosa come 'hg tip --repository https: // bitbucket.org/aragost/javahg /' fallirà; 'abort: repository 'https://bitbucket.org/aragost/javahg/' non è locale'. –

+0

@ChrisMorgan: sì, quasi tutti i comandi falliscono così quando si passa un repo remoto al flag '--repository'. Sono solo 'hg id' e' hg outgoing' che interrogheranno i repository remoti (in modo piuttosto limitato). –

+0

Grazie per una risposta chiara :) –