2010-11-28 7 views
25

Y a-t-il un moyen de lister les agences à distance à Mercurial comme ici à Git?Liste des branches à distance à Mercurial

git branch -r 

Je veux la liste des branches sur une machine distante (par exemple Bitbucket), donc l'utilisation:

hg branches -R `hg showconfig paths.default` --color false 

échoue avec abort: dépôt non locale

Répondre

18

Non, il est impossible de lister les branches d'un référentiel distant sans le cloner en local.

S'il existe un accès SSH à la machine ayant le référentiel distant, alors Mercurial peut être utilisé directement: ssh server hg -R path/to/repo branches.

Si le dépôt est servi avec hgweb, puis une liste des branches peut être récupéré à partir de cela, en utilisant le style brut pour l'analyse syntaxique facile: https://www.mercurial-scm.org/repo/hg/branches?style=raw

BitBucket a sa propre API, où il est possible d'obtenir les branches , voir their help et faire une requête comme une URL comme https://api.bitbucket.org/1.0/repositories/mirror/mercurial/branches/

+0

Oui, c'est ce que je soupçonne. Merci pour les informations utiles sur hgweb et bitbucket. – Raoul

+0

Je me demande pourquoi mercurial conçu de cette façon? Je peux obtenir la révision d'une branche particulière en utilisant 'hg id -r , mais je ne peux pas obtenir la liste de toutes les branches .. – neverov

+0

Il fonctionne * si * le référentiel" distant "est sur le même hôte et spécifié par un chemin du fichier. c'est-à-dire, si '.hg/hgrc' ou' hg paths default' montre simplement un chemin et non, par exemple. un URI SSH. De cette façon, vous pouvez voir des branches encore éloignées dans le sens où elles n'ont pas été tirées. –

18

L'API Mercurial permet:

from mercurial import ui, hg, node 

peer = hg.peer(ui.ui(), {}, 'http://hg.python.org/cpython') 
for name, rev in peer.branchmap().items(): 
    print name, node.short(rev[0]) 

L'extrait ci-dessus produit:

default aaa68dce117e 
legacy-trunk b77918288f7d 
3.2 4787b9b2f860 
3.0 4cd9f5e89061 
3.1 5a6fa1b8767f 
2.3 364638d6434d 
2.2 61b0263d6881 
2.1 e849d484029f 
2.0 5fd74354d73b 
2.7 260f3ad7af4b 
2.6 f130ce67387d 
2.5 b48e1b48e670 
2.4 ceec209b26d4 
+0

Comment exécutez-vous un tel script? –

+0

Vous mettez l'extrait dans un fichier et l'appelez avec 'python filename.py'. Est-ce ce que vous demandez? – gvalkov

+2

Oui, c'est vrai. Merci. Je n'étais juste pas sûr de ce que c'était. –

1

développiez @ gvalkov de réponse, vous pouvez en faire une véritable extension en écrivant un fichier rheads.py:

from mercurial import hg, commands, cmdutil, node 
cmdtable = {} 
command = cmdutil.command(cmdtable) 
@command('rheads', commands.remoteopts, 'hg rheads [SOURCE]') 
def rheads(ui, repo, source='default', **opts): 
    """print (possibly remote) heads 

    Prints a series of lines consisting of hashes and branch names. 
    Specify a local or remote repository, defaulting to the configured remote. 
    """ 
    other = hg.peer(ui or repo, opts, ui.expandpath(source)) 
    for tag, heads in other.branchmap().iteritems(): 
     for h in heads: 
      ui.write("%s %s\n" % (node.short(h), tag)) 

est configuré en ~/.hgrc avec

[extensions] 
rheads = …/rheads.py 

vous pouvez l'exécuter comme :

hg rheads 

J'ai essayé de faire une commande qui peut être invoqué en dehors de tout dépôt, spécifiant simplement l'URL comme argument, mais n'a pas pu obtenir la syntaxe au travail:

commands.norepo += " rheads" 
1

peut-être que vous cherchez hg incoming -B Cela a fonctionné assez bien pour moi. Cela montre les signets.

Questions connexes