Я хочу использовать расширение ACL, чтобы разрешить только команде QA делать push-уведомления и коммиты в стабильной ветке, не накладывая ограничений на другие ветки. Однако я не вижу, как это сделать с помощью списков deny и allow, поскольку мне кажется, что мне нужно будет указать в [acl.deny.branches] сущность, эквивалентную "всем пользователям, кроме группы ____", что, по-моему, невозможно. Набор всех пользователей и других веток открыт и заранее неизвестен (известен только набор людей из QA и одна ограниченная ветка), поэтому я не могу просто перечислить всех пользователей в списке deny для ограниченной ветки или все ветки = * в списке allow.
Также, при использовании расширения ACL мне следует отключить allow_push = * в hgweb.config / hgrc? Я не знаю, имеет ли оно приоритет или расширение ACL. Я видел в списке рассылки от 2011 года, что директива hgrc имеет приоритет, но это может быть неправильно или устаревшим, поэтому я хотел бы подтвердить.
[Редактировать]
Я вижу, что и другие сталкивались с подобной проблемой:http://mercurial.808500.n3.nabble.com/PATCH-acl-support-negating-the-list-of-users-groups-with-leading-quot-quot-td2447281.html К концу этой ветки обсуждения, похоже, ничего не решено.
решение1
По рекомендации канала #mercurial я посмотрел на исходник расширения. И, конечно же, отрицание поддерживается оператором !
. Решение тогда было простым:
[extensions]
hgext.acl =
[hooks]
pretxncommit.acl = python:hgext.acl.hook
pretxnchangegroup.acl = python:hgext.acl.hook
[acl.groups]
reviewers = Max, Moritz
[acl.deny.branches]
stable = !@reviewers
Я отредактировал документацию вики по адресуhttp://mercurial.selenic.com/wiki/AclExtensionотметить способность отрицать.