# HG changeset patch # User Paul Crowley # Date 1208856047 -3600 # Node ID 59540181a4bb9e8a9432a6c86ece33ff5ec343b6 # Parent f4daa224dc7eb7371b6ddfb841f5e56a83379a9f simplify by allowing some params to be preset in rules diff -r f4daa224dc7e -r 59540181a4bb access.py --- a/access.py Tue Apr 22 10:13:39 2008 +0100 +++ b/access.py Tue Apr 22 10:20:47 2008 +0100 @@ -21,20 +21,20 @@ def __init__(self, ui, repo): self.ui = ui self.repo = repo - self.repo_path = os.environ['HG_REPO_PATH'] - self.user = os.environ['REMOTE_USER'] self.rules = rules.Ruleset.readfile(os.environ['HG_ACCESS_RULES_FILE']) + self.rules.set(user = os.environ['REMOTE_USER']) + self.rules.set(repo = os.environ['HG_REPO_PATH']) def allow(self, node): '''return if access allowed, raise exception if not.''' ctx = self.repo.changectx(node) branch = ctx.branch() - if not self.rules.allow("write", user=self.user, repo=self.repo_path, branch=self.branch, file=None): + if not self.rules.allow("write", branch=self.branch, file=None): self.ui.debug(_('%s: user %s not allowed on branch %s\n') % (__name__, self.user, branch)) return False for f in ctx.files(): - if not self.rules.allow("write", user=self.user, repo=self.repo_path, branch=self.branch, file=f): + if not self.rules.allow("write", branch=self.branch, file=f): self.ui.debug(_('%s: user %s not allowed on %s\n') % (__name__, self.user, f)) return False diff -r f4daa224dc7e -r 59540181a4bb hg-ssh --- a/hg-ssh Tue Apr 22 10:13:39 2008 +0100 +++ b/hg-ssh Tue Apr 22 10:20:47 2008 +0100 @@ -48,15 +48,15 @@ fail("Disallowing path: %s" % path) return path -def get_cmd(rules, remoteuser, cmd): +def get_cmd(rules, cmd): if cmd.startswith('hg -R ') and cmd.endswith(' serve --stdio'): repo = getpath(cmd[6:-14]) - if rules.allow("read", user=remoteuser, repo=repo, branch=None, file=None): + if rules.allow("read", repo=repo): os.environ["HG_REPO_PATH"] = repo return ['-R', repo, 'serve', '--stdio'] elif cmd.startswith('hg init '): repo = getpath(cmd[8:]) - if rules.allow("init", user=remoteuser, repo=repo, branch=None, file=None): + if rules.allow("init", repo=repo): os.environ["HG_REPO_PATH"] = repo return ['init', repo] fail("Illegal command %r" % cmd) @@ -69,8 +69,9 @@ % sys.argv) rules = rules.Ruleset.readfile(os.environ['HG_ACCESS_RULES_FILE']) -remoteuser = getpath(os.environ['REMOTE_USER']) -todispatch = get_cmd(rules, remoteuser, +rules.set(remoteuser = getpath(os.environ['REMOTE_USER'])) +rules.set(branch = None, file = None) +todispatch = get_cmd(rules, os.environ.get('SSH_ORIGINAL_COMMAND', '?')) dispatch.dispatch(todispatch) diff -r f4daa224dc7e -r 59540181a4bb rules.py --- a/rules.py Tue Apr 22 10:13:39 2008 +0100 +++ b/rules.py Tue Apr 22 10:20:47 2008 +0100 @@ -50,13 +50,20 @@ def __init__(self): self.rules = [] + self.preset = {} def add(self, action, conditions): self.rules.append((action, conditions)) + + def set(self, **kw): + self.preset.update(kw) + def matchrule(self, **kw): + d = self.preset.copy() + d.update(**kw) for a, c in self.rules: - if c(**kw): + if c(**d): return a return None @@ -77,5 +84,3 @@ finally: f.close() return res - -