Mercurial Changegroup钩子根据分支而变化

Mercurial Changegroup钩子根据分支而变化,mercurial,hook,mercurial-hook,Mercurial,Hook,Mercurial Hook,Mercurial中是否有一个现有的钩子,它与changegroup一样,允许在推送时执行操作,但允许我根据哪些分支受其中的变更集影响而执行多个操作(或更改它们) 例如,当进行推送时,我需要在url处通知侦听器,但理想情况下,它会根据哪个分支受到影响通知不同的url,而不只是将它们全部覆盖 没有分支特定的钩子,但是可以在钩子本身中执行该逻辑。例如,在您的hgrc中: [hooks] changeset = actions-by-branch.sh 然后在您的操作by branch.sh中,您将

Mercurial中是否有一个现有的钩子,它与changegroup一样,允许在推送时执行操作,但允许我根据哪些分支受其中的变更集影响而执行多个操作(或更改它们)


例如,当进行推送时,我需要在url处通知侦听器,但理想情况下,它会根据哪个分支受到影响通知不同的url,而不只是将它们全部覆盖

没有分支特定的钩子,但是可以在钩子本身中执行该逻辑。例如,在您的
hgrc
中:

[hooks]
changeset = actions-by-branch.sh
然后在您的
操作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

请注意,我使用了变更集而不是变更组挂钩。单个变更组可以在多个分支上具有变更集,这将使逻辑复杂化。如果你决定走这条路线,你需要从
$HG_NODE
一直循环到
tip
,对变更组中的每个变更集进行操作。

我想
${BRANCH:=default}
应该是
BRANCH=${BRANCH:=default}
。它是按写的。从bash手册页“${parameter:=word}分配默认值。如果参数未设置或为null,则word的扩展将分配给parameter。然后替换parameter的值。位置参数和特殊参数可能不会以这种方式分配如果我们想要更详细的赋值语句,我们会使用
:-
而不是
:=
。好的,我已经解决了这个问题。Bash尝试将
$BRANCH
的值作为命令运行。这就是为什么我收到了一条
mybranchname:command not found
错误消息。因此,您要么需要赋值,要么使用bash no op(
:${BRANCH:=default}
)来避免此错误。