diff -r 97a8fe72a35e -r 107d28ce67f5 src/mercurialserver/access.py --- a/src/mercurialserver/access.py Fri Dec 18 13:25:45 2009 +0000 +++ b/src/mercurialserver/access.py Sat Dec 19 19:21:41 2009 +0000 @@ -1,12 +1,4 @@ -# Copyright 2008-2009 LShift Ltd -# Copyright 2006 Vadim Gelfer -# -# Authors: -# Paul Crowley -# Vadim Gelfer -# -# This software may be used and distributed according to the terms -# of the GNU General Public License, incorporated herein by reference. +"""Mercurial access control hook""" from mercurial.i18n import _ import mercurial.util @@ -16,32 +8,21 @@ from mercurialserver import ruleset from mercurialserver import changes -class 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): +def allow(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 - 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()))) + return True 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) + if not allow(ctx): + raise mercurial.util.Abort(_('%s: access denied for changeset %s') % + (__name__, mercurial.node.short(ctx.node()))) +