2011-01-22 16 views
6

¿Hay un gancho existente en Mercurial que, como changegroup, permite que las acciones se lleven a cabo en un empuje, pero me permite realizar varias acciones (o variarlas) en función de qué ramas se ven afectadas? los conjuntos de cambios en el mismo?El gancho Mercurial Changegroup varía en función de las ramas

Por ejemplo, tengo que notificar a un oyente en una url cuando se realiza una inserción, pero lo ideal sería notificar a diferentes URL en función de qué rama se ve afectada sin solo cubrirlos a todos.

Respuesta

7

No hay ganchos específicos de rama, pero puede hacer esa lógica en el gancho. Por ejemplo, en su hgrc:

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

y luego en su actions-by-branch.sh que haría:

#!/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 

cuenta que he utilizado un conjunto de cambios en lugar de gancho changegroup. Un solo grupo de cambios puede tener conjuntos de cambios en múltiples ramas, lo que complicaría la lógica. Si decide ir por esa ruta, debe realizar un bucle desde $HG_NODE hasta tip para actuar en cada conjunto de cambios en el grupo de cambios.

+1

Supongo que '$ {BRANCH: = default}' debe ser 'BRANCH = $ {BRANCH: = default}'. – palacsint

+0

Funciona como está escrito. Desde la página bash man "$ {parameter: = word} Asignar valores predeterminados. Si el parámetro está desactivado o es nulo, la expansión de la palabra se asigna al parámetro. El valor de param- eter se sustituye. Parámetros posicionales y especiales los parámetros no se pueden asignar de esta manera ". Si quisiéramos la declaración de asignación más detallada, usaríamos ': -' en lugar de': = '. –

+1

Ok, he resuelto el problema. Bash intenta ejecutar el valor de '$ BRANCH' como un comando. Es por eso que recibí un mensaje de error 'mybranchname: command not found'. Entonces, o necesitas la asignación o usas un bash no-op (': $ {BRANCH: = default}') para evitar este error. – palacsint

Cuestiones relacionadas