diff -r 2f0ea1163b9e -r fd16d9a1234b src/access.py --- a/src/access.py Fri Mar 06 08:56:48 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -# 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. - -from mercurial.i18n import _ -import mercurial.util -import mercurial.node - -import os -import ruleset -import changes - -class Checker(object): - '''acl checker.''' - - def __init__(self, ui, repo): - self.ui = ui - self.repo = repo - - self.rules = ruleset.rules_from_env() - self.rules.set(user = os.environ['REMOTE_USER']) - self.rules.set(repo = os.environ['HG_REPO_PATH']) - - def allow(self, ctx): - branch = ctx.branch() - if not self.rules.allow("write", branch=branch, file=None): - return False - for f in ctx.files(): - if not self.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)