Запретить добавление коммитов, которые добавляют к закрытым веткам - PullRequest
8 голосов
/ 18 октября 2010

Как я могу настроить сервер Mercurial для ограничения коммитов по названной ветви после ее закрытия? Я только хочу, чтобы у администратора хранилища была возможность открыть ветку.

https://www.mercurial -scm.org / wiki / PruningDeadBranches говорит, что закрытые наборы изменений могут быть идентифицированы как "close = 1 в дополнительном поле набора изменений". Непонятно, как прочитать дополнительное поле ревизии с помощью Mercurial API .

Ответы [ 3 ]

7 голосов
/ 18 октября 2010

Существует расширение ACL, которое распространяется вместе с Mercurial. Вы должны быть в состоянии указать замороженные ветки, запретив коммит каждому, кроме администратора. Я не уверен, могут ли именованные ветви использовать эту возможность.

Настройка acls:

[acl.deny.branches] 
frozen-branch = *

[acl.allow.branches]
branch_name = admin
4 голосов
/ 18 октября 2010

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

#!/bin/sh
for thenode in $(hg log -r $HG_NODE:tip --template '{node}\n') ; do
     if hg branches --closed | grep -q "^$(hg id --branch -r $thenode).*\(closed\)"  ; then
          echo Commits to closed branches are not allowed -- bad changeset $thenode
          exit 1
     fi
done

Вы бы установили этот хук следующим образом:

[hooks]
prechangegroup = /path/to/that.sh

Почти наверняка есть способ сделать это, используя in-python-хуки с API, на который вы ссылались, но хуки-оболочки тоже неплохо работают.

1 голос
/ 17 сентября 2012

Вот обработчик, который должен отклонять дополнительные наборы изменений в закрытой ветви.

from mercurial import context, ui
def run(ui, repo, node, **kwargs):
    ctx = repo[node]
    for rev in xrange(ctx.rev(), len(repo)):
        ctx = context.changectx(repo, rev)
        parent1 = ctx.parents()[0]
        if parent1 != None and parent1.extra().get('close'):
            ui.warn("Commit to closed branch is forbidden!\n")
            return True
    return False

Хук может работать в режиме pretxncommit (проверяется во время транзакции локальной фиксации) или режиме pretxnchangegroup (проверяется при добавлении наборов изменений из внешнего репо) со следующими записями hgrc:

[hooks]
pretxncommit.forbid_commit_closed_branch = python:/path/to/forbid_commit_closed_branch.py:run
pretxnchangegroup.forbid_commit_closed_branch = python:/path/to/forbid_commit_closed_branch.py:run

Не уверен, что этот хук будет работать с версиями Mercurial до 2.2.

...