2011-01-22 7 views
6

変更グループと同様に、プッシュでアクションを実行できるようにするMercurialのフックは存在しますが、影響を受けるブランチに基づいて複数のアクションを実行できますそこにチェンジセット?Mercurial Changegroupフックはブランチに基づいて異なります

たとえば、プッシュが行われたときにリスナーにURLを通知する必要がありますが、理想的には、ブランチするだけで影響を受けるブランチに基づいて別のURLに通知します。

答えて

7

分岐仕様フックはありませんが、フック自体でそのロジックを実行できます。あなたのhgrc例えば:

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

し、その後で、あなたのactions-by-branch.shあなたがしたい:私はチェンジではなくチェンジグループのフックを使用

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

注意してください。 1つの変更グループに複数のブランチ上にチェンジセットを持たせることができ、ロジックが複雑になります。そのルートに行くことを決めたら、$HG_NODEからtipにループする必要があります。これは、変更グループの各チェンジセットに作用します。

+1

'$ {BRANCH:= default}'は 'BRANCH = $ {BRANCH:= default}'にする必要があります。 – palacsint

+0

これは書かれたとおりに動作します。 "$ {parameter:= word} デフォルト値を代入する:パラメータが設定されていないかヌルの場合、単語の拡張が のパラメータに割り当てられ、パラメータの値が代入されます。このようにパラメータを割り当てることはできません。もっと冗長な代入文が必要だった場合、 ':='の代わりに ':'を使います。 –

+1

問題はわかった。 Bashは '$ BRANCH'の値をコマンドとして実行しようとします。そのため、私は 'mybranchname:command not found'エラーメッセージを得ました。したがって、このエラーを回避するには、代入が必要か、bash no-op( ':$ {BRANCH:= default}')を使用します。 – palacsint

関連する問題