# Copyright 2008-2009 LShift Ltd# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>## Authors:# Paul Crowley <paul@lshift.net># Vadim Gelfer <vadim.gelfer@gmail.com>## This software may be used and distributed according to the terms# of the GNU General Public License, incorporated herein by reference.from mercurial.i18n import _import mercurial.utilimport mercurial.nodeimport osfrom mercurialserver import rulesetfrom mercurialserver import changesclass Checker(object): '''acl checker.''' def __init__(self, ui, repo): self.ui = ui self.repo = repo def allow(self, ctx): branch = ctx.branch() if not ruleset.rules.allow("write", branch=branch, file=None): return False for f in ctx.files(): if not ruleset.rules.allow("write", branch=branch, file=f): return False return True def check(self, ctx): '''return if access allowed, raise exception if not.''' if not self.allow(ctx): raise mercurial.util.Abort(_('%s: access denied for changeset %s') % (__name__, mercurial.node.short(ctx.node())))def hook(ui, repo, hooktype, node=None, source=None, **kwargs): if hooktype != 'pretxnchangegroup': raise mercurial.util.Abort(_('config error - hook type "%s" cannot stop ' 'incoming changesets') % hooktype) c = Checker(ui, repo) for ctx in changes.changes(repo, node): c.check(ctx)