2011-05-27 56 views
0

我想創建一個鉤子,阻止推到遠程存儲庫,如果你試圖推多個分支。鉤一次只限制推送到一個分支

這裏的鉤:

#!/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 <[email protected]> 
date:  Thu May 26 16:36:49 2011 +0100 
summary:  commit on default 

changeset: 59:43be74e39a44 
branch:  branch1 
tag:   tip 
user:  keshurj <[email protected]> 
date:  Thu May 26 16:40:25 2011 +0100 
summary:  commit on branch1 

並嘗試使用汞推-b BRANCH1推,掛鉤仍然可以看到$ {HG_NODE}爲8d2bebe08dd9,默認爲。

有沒有什麼方法可以確保通過遠程鉤子一次只對一個分支進行推送?

打開任何和所有的建議(復:這個工作流程:))

+0

沒有理由認爲'8d2bebe08dd9' 是'43be74e39a44'的父親 – Matt 2011-05-27 18:20:09

回答

0

原來我在做一些愚蠢的....變更58變更59

謝謝你們的父。

1

提交作業$CHANGESETS$1運行腳本時沒有定義 - 與$HG_NODE

http://www.selenic.com/mercurial/hgrc.5.html#hooks

更換這假定您正在將此作爲prexxchangegroup鉤子運行。 (經過1.8.1的測試,但我確信最近沒有改變)。

+0

Matt,對不起,我忘了提及,我將$ HG_NODE作爲pretxnchangegroup鉤子的參數傳入 – 2011-05-31 08:47:58

1

你有沒有考慮只是使用別名像hg nudge

http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/

這僅僅是:

[alias] 
nudge = push --rev . 

這可以確保你只能把你的當前父修訂和它的祖先。在上面的腳本中給出假設可能都在同一分支中(或者無論如何都需要推送)。你需要創造一個新的習慣,但它非常直接。