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

問題: 2 つのブランチでコミットした場合:

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 として認識します。

リモートフックを介して、一度に 1 つのブランチのみにプッシュが行われるようにする方法はありますか?

あらゆる提案を受け入れます ( re: このワークフロー :) )

4

3 に答える 3

2

hg nudge次のようなエイリアスを使用することを検討しましたか?

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

これはちょうどです:

[alias]
nudge = push --rev .

これにより、現在の親リビジョンとその祖先のみを確実にプッシュできます。上記のスクリプトの仮定を考えると、おそらくすべて同じブランチにあるでしょう(またはとにかくそれをプッシュする必要があります)。新しい習慣を作る必要がありますが、それはかなり直接的です。

于 2011-05-28T03:28:18.687 に答える
1

$1あなたの割り当てで$CHANGESETSは、スクリプトの実行時に定義されていません - に置き換えてください$HG_NODE

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

これは、これを pretxnchangegroup フックとして実行していることを前提としています。(hg 1.8.1 でテストしましたが、最近変更されていないことはかなり確信しています)。

于 2011-05-27T18:18:38.807 に答える
0

私は愚かなことをしていたことがわかりました....changeset58はchangeset59の親です。

みんなありがとう。

于 2011-06-01T11:52:05.483 に答える