2017-05-30 2 views
0

Je voudrais m'assurer que lorsque les changements de repo local sont transférés à notre repo distant principal, les gens poussent les changements avec un signet. Donc, soit c'est la première fois qu'ils poussent avec un signet qu'ils ont ajouté localement (dans leur repo cloné), ou ils poussent à distance sur une ligne déjà bookmarkée.Marque-page actuel sur Mercurial Hook

J'ai mis en place un crochet python pour Mercurial dans le fichier hgrc dans .hgrc comme ça ...

[crochets] pretxnchangegroup.push = python: ./ hg/pushhook.py: bookmakrhook

Et quand je pousse, je reçois mon rappel et ma fonction est appelée. Comment puis-je obtenir le signet actif qui arrive avec les changements du repo de l'utilisateur au repo principal que tout le monde clone?

J'ai cette signature dans mon fichier crochet python:

def bookmarkhook (ui, repo, ** kwargs)

Je ne peux pas sembler faire quoi que ce soit avec l'instance de prise en pension, sauf se branche etc avec

repo [Aucun] .branches()

C'est un début, comme je peux au moins vous assurer qu'ils poussent par défaut, et ne pas créer une autre tête (je veux seulement une branche - par défaut, et beaucoup signets).

+0

ok, donc quand il y a un signet sur le serveur distant déjà, je peux l'obtenir avec repo._bookmarks, donc cela est très bien pour moi de vérifier je poussais à un signet, mais la première fois un coup de pouce du repérage local à un repo distant se produit pour créer réellement le signet sur le repo distant, le signet n'est pas encore sur le repo distant, donc aucun n'existe, et ainsi le check _bookmarks échouera. J'ai donc besoin d'un moyen de voir si un signet est créé pour la première fois, et pas seulement d'obtenir les bookmarks sur le repo distant. –

+0

Qu'en est-il de vérifier via 'hg incoming' pour les signets distants non présents? – planetmaker

Répondre

1

Le signet est disponible dans un crochet pretxnclose. Cela fonctionne pour moi (nécessite un signet en poussant sur la branche "release"). Les poignées poussant vers un signet existant et poussant un nouveau signet.

def require_bookmark_on_release(ui, repo, **kwargs): 
    if repo[None].branch() == 'release' and not repo.currenttransaction().changes['bookmarks']: 
     ui.warn('A bookmark is required when committing to the release branch\n') 
     return True 
    else: 
     return False