# HG changeset patch # User Paul Crowley # Date 1255363466 -3600 # Node ID 72100d3ed1bd7de89c49eca1c021039bc54e4a57 # Parent 00b48d7bdfa020c34bd31d1cbe1a31c9b6150b31 Don't mix exceptions and sys.exit based failures diff -r 00b48d7bdfa0 -r 72100d3ed1bd src/hg-ssh --- a/src/hg-ssh Mon Oct 12 16:52:06 2009 +0100 +++ b/src/hg-ssh Mon Oct 12 17:04:26 2009 +0100 @@ -46,7 +46,7 @@ if path == "": return if os.path.exists(path + "/.hg"): - raise ruleset.AccessException() + fail("Cannot create repo under existing repo") checkpath(path) def getrepo(op, repo): @@ -59,7 +59,8 @@ if component.startswith("."): fail("paths cannot contain dot file components") ruleset.rules.set(repo=repo) - ruleset.rules.check(op, branch=None, file=None) + if not ruleset.rules.allow(op, branch=None, file=None): + fail("access denied") checkpath(repo) return repo @@ -90,24 +91,21 @@ ruleset.rules.readfile(f) cmd = os.environ.get('SSH_ORIGINAL_COMMAND', None) -try: - if cmd is None: - fail("direct logins on the hg account prohibited") - elif cmd.startswith('hg -R ') and cmd.endswith(' serve --stdio'): - repo = getrepo("read", cmd[6:-14]) - if not os.path.isdir(repo + "/.hg"): - fail("no such repository %s" % repo) - dispatch.dispatch(['-R', repo, 'serve', '--stdio']) - elif cmd.startswith('hg init '): - repo = getrepo("init", cmd[8:]) - if os.path.exists(repo): - fail("%s exists" % repo) - d = os.path.dirname(repo) - if d != "" and not os.path.isdir(d): - os.makedirs(d) - dispatch.dispatch(['init', repo]) - else: - fail("illegal command %r" % cmd) -except ruleset.AccessException: - fail("access denied") +if cmd is None: + fail("direct logins on the hg account prohibited") +elif cmd.startswith('hg -R ') and cmd.endswith(' serve --stdio'): + repo = getrepo("read", cmd[6:-14]) + if not os.path.isdir(repo + "/.hg"): + fail("no such repository %s" % repo) + dispatch.dispatch(['-R', repo, 'serve', '--stdio']) +elif cmd.startswith('hg init '): + repo = getrepo("init", cmd[8:]) + if os.path.exists(repo): + fail("%s exists" % repo) + d = os.path.dirname(repo) + if d != "" and not os.path.isdir(d): + os.makedirs(d) + dispatch.dispatch(['init', repo]) +else: + fail("illegal command %r" % cmd) diff -r 00b48d7bdfa0 -r 72100d3ed1bd src/mercurialserver/ruleset.py --- a/src/mercurialserver/ruleset.py Mon Oct 12 16:52:06 2009 +0100 +++ b/src/mercurialserver/ruleset.py Mon Oct 12 17:04:26 2009 +0100 @@ -28,9 +28,6 @@ return True return c -class AccessException(Exception): - pass - class Ruleset(object): '''Class representing the rules in a rule file''' @@ -61,10 +58,6 @@ a = self.matchrule(kw) return a in self.levels and self.levels.index(a) <= self.levels.index(level) - def check(self, level, **kw): - if not self.allow(level, **kw): - raise AccessException() - def readfile(self, fn): try: f = open(fn)