крючок для ограничения толчка только одной веткой за раз - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь создать хук, который блокирует отправку в удаленный репозиторий, если вы пытаетесь пушить несколько раз ветвь.

Вот крючок:

#!/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, что по умолчанию.

Есть ли способ гарантировать, что пуш выполняется только к одной ветке за раз, через удаленный хук?

Открыто для любых предложений (ре: этот рабочий процесс :))

Ответы [ 3 ]

2 голосов
/ 28 мая 2011

Рассматривали ли вы просто использование псевдонима типа hg nudge:

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

, что просто:

[alias]
nudge = push --rev .

Это гарантирует, что вы отправляете только свою текущую родительскую ревизию и ее предков. что с учетом допущений в вашем скрипте выше, вероятно, все будет в одной ветке (или в любом случае требует подтолкнуть). Вам нужно создать новую привычку, но она довольно прямолинейна.

1 голос
/ 27 мая 2011

$1 в вашем назначении $CHANGESETS не определяется при запуске сценария - замените его на $HG_NODE

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

Предполагается, что вы используете это как ловушку pretxnchangegroup. (Протестировано с hg 1.8.1, но я уверен, что за последнее время оно не изменилось).

0 голосов
/ 01 июня 2011

оказалось, что я делал что-то глупое .... changeset 58 является родителем changeset 59.

Спасибо, ребята.

...