2011-01-22 9 views
6

Esiste un hook esistente in Mercurial che, come changegroup, consente di eseguire azioni su un push, ma mi consente di eseguire più azioni (o modificarle) in base a quali rami sono interessati da i changeset in esso?L'hook Mercurial Changegroup varia in base ai rami

Ad esempio, ho bisogno di notificare un listener in un url quando viene effettuata una push, ma idealmente notificherebbe diversi urls in base a quale ramo è interessato senza semplicemente copiarli tutti.

risposta

7

Non ci sono hook di tipo branch-specfic, ma è possibile farlo nella stessa hook. Ad esempio nella tua hgrc:

[hooks] 
changeset = actions-by-branch.sh 

e poi nel vostro actions-by-branch.sh faresti:

#!/bin/bash 
BRANCH=$(hg log --template '{branch}' -r $HG_NODE) 
BRANCH=${BRANCH:-default} # set value to 'default' if it was empty 

if [ "$BRANCH" == "default" ] ; then 
    do something 
elif [ "$BRANCH" == "release" ] ; then 
    do something else 
else 
    do a different thing 
fi 

Si noti che ho usato un insieme di modifiche piuttosto che gancio changegroup. Un singolo changegroup può avere changeset su più rami, il che complicherebbe la logica. Se decidi di seguire questa strada, devi effettuare il loop da $HG_NODE fino a tip per agire su ciascun changeset nel gruppo di modifiche.

+1

Immagino che $ {BRANCH: = default} 'debba essere' BRANCH = $ {BRANCH: = default} '. – palacsint

+0

Funziona come scritto. Dalla pagina man bash "$ {parametro: = word} Assegna valori predefiniti Se il parametro è non impostato o nullo, l'espansione della parola viene assegnata al parametro, quindi viene sostituito il valore del parametro . Parametri posizionali e speciali I parametri non possono essere assegnati in questo modo. " Se volessimo l'istruzione di assegnazione più dettagliata useremmo ': -' invece di': = '. –

+1

Ok, ho capito il problema. Bash tenta di eseguire il valore di $ BRANCH come comando. Ecco perché ho ricevuto un messaggio di errore "mybranchname: comando non trovato". Quindi, o hai bisogno del compito o usa un bash no-op (': $ {BRANCH: = default}') per evitare questo errore. – palacsint