Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
50
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Обработка событий в репозитории с помощью ловушек

10.6. Встроенные ловушки

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

10.6.1. acl — контроль доступа к частям репозитория

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

Этот модуль реализует контроль доступа на основе идентификационных данных пользователя, выполняющего отправку, а не того, кто фиксирует ревизию. Имеет смысл использовать этот ловушку, только если у вас есть заблокированный серверная среда, которая аутентифицирует удаленных пользователей, и вы хотите быть уверены, что только конкретные пользователи имеют возможность отправить изменения на этот сервер.

10.6.1.1. Конфигурация ловушки acl

Для того чтобы управлять входящими ревизиями, ловушка acl должна использоваться в качестве ловушки pretxnchangegroup. Это позволяет ей видеть, какие файлы были изменены в каждом входящей ревизии и отклонять группы ревизий, если они пытаются изменять «запрещенные» файлы. Пример:

[hooks]

pretxnchangegroup.acl = python:hgext.acl.hook

Расширение acl конфигурируется с помощью трех разделов.

Раздел acl имеет только одно поле, sources, в котором перечислены источники входящих ревизий, на которые ловушка обращает внимание. Вам обычно не нужно настраивать этот раздел.

serve: контролирует входящие ревизии, которые поступают из удаленного репозитория по протоколу http либо ssh. Это значение по умолчанию для sources, и, как правило только это значение вам и нужно для этого элемента конфигурации.

pull: контроль входящих ревизий, которые прибывают через вытягивание из локального репозитория.

push: контроль входящих ревизий, которые прибывают через отправку из локального репозитория.

bundle: Контроль входящих ревизий, которые прибывают из другого хранилища с помощью bundle-ов.

Раздел acl.allow контролирует пользователей, которым разрешено добавлять ревизии в репозиторий. Если этот раздел отсутствует, все пользователи, которые явно не запрещены будут разрешены. Если этот раздел присутствует, все пользователи, которые явно не разрешены будут запрещены (пустой раздел означает, что все пользователи не имеют доступа).

Раздел acl.deny определяет, какие пользователи не могут добавлять ревизии в репозиторий. Если этот раздел отсутствует или пуст, ни для одного нет запретов.

Синтаксис для разделов acl.allow и acl.deny одинаковы. Слева каждая записи glob-шаблон, который соответствует файлам или каталогам, по отношению к корню репозитория, справа, имя пользователя.

В следующем примере, пользователь docwriter может только добавить ревизии в подкаталоги каталога docs репозитория, а intern может вставлять изменения в любой файл или каталог, кроме source/sensitive.

[acl.allow] docs/** = docwriter [acl.deny]

source/sensitive/** = intern

117

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]