如果您尝试多次推送分支,我正在尝试创建一个阻止推送到远程存储库的挂钩。
这是钩子:
#!/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,这是默认情况。
有没有办法确保通过远程钩子一次只对一个分支进行推送?
打开任何和所有建议(重新:此工作流程:))
答案 0 :(得分:2)
您是否考虑过使用hg nudge
之类的别名:
http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/
只是:
[alias]
nudge = push --rev .
这确保您只推送当前的父版本及其祖先。在上面的脚本中给出假设可能都在同一个分支中(或者需要推动它)。你需要创造一种新的习惯,但它非常直接。
答案 1 :(得分:1)
$1
作业中的{p> $CHANGESETS
- 将其替换为$HG_NODE
http://www.selenic.com/mercurial/hgrc.5.html#hooks
这假设您将此作为pretxnchangegroup挂钩运行。 (经过hg 1.8.1的测试,但我相当肯定最近没有改变)。
答案 2 :(得分:0)
原来我做的事情很傻....变革集58是变更集59的父母。
谢谢你们。