挂钩以限制一次仅推入一个分支

我尝试创建一个钩子,如果您尝试多次推送分支,则该钩子将阻止推送到远程存储库。 这是钩子:
#!/bin/bash

HG_EXE=\"/opt/csw/bin/hg\"
CHANGESETS=`${HG_EXE} log -r $1:tip --template \'{node} \'`

i=0
for changeset in ${CHANGESETS}
do
       BRANCH=`${HG_EXE} log -r ${changeset} --template \'{branches}\'`

       if [ \"${BRANCH}\" == \"\" ]
       then
              BRANCH=\"default\"
       fi
       BRANCHES[$i]=${BRANCH}
       i=$i+1
done

items=${#BRANCHES[*]}
if [ $items -gt 1 ]
then
       i=0
       while [ \"${BRANCHES[${i}+1]}\" != \"\" ]
       do
              if [ \"${BRANCHES[${i}]}\" != \"${BRANCHES[${i}+1]}\" ]
              then
                     echo \"ERROR: You are trying to push more than one branch, use     \\\"hg push -b [branch_name]\\\"\"
                     exit 1
              fi
       i=$i+1 
       done
fi
问题: 如果我已承诺在两个分支机构:
changeset:   58:8d2bebe08dd9
user:        keshurj <Jay.Keshur@monitisegroup.com>
date:        Thu May 26 16:36:49 2011 +0100
summary:     commit on default

changeset:   59:43be74e39a44
branch:      branch1
tag:         tip
user:        keshurj <Jay.Keshur@monitisegroup.com>
date:        Thu May 26 16:40:25 2011 +0100
summary:     commit on branch1
并尝试使用hg push –b branch1进行推送,该钩子仍将$ {HG_NODE}视为8d2bebe08dd9,这是默认设置。 是否有任何方法可以确保通过远程挂钩一次只推送到一个分支? 公开接受所有建议(re:此工作流程:))     
已邀请:
        您是否考虑过仅使用
hg nudge
之类的别名: http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/ 这只是:
[alias]
nudge = push --rev .
这样可以确保您仅推送当前的父修订版及其祖先。鉴于您上面脚本中的假设,这些代码可能全都在同一个分支中(或要求将其推送)。您需要养成新习惯,但这很直接。     
        运行脚本时未定义分配给
$CHANGESETS
的-4ѭ-将其替换为
$HG_NODE
http://www.selenic.com/mercurial/hgrc.5.html#hooks 假设您将其作为pretxnchangegroup挂钩运行。 (使用hg 1.8.1进行了测试,但是我可以肯定地说,最近没有改变)。     
        原来我在做些愚蠢的事情。变更集58是变更集59的父级。 谢谢你们。     

要回复问题请先登录注册