From 1dfe84754a1dce077b6228aab551275c34275ea0 Mon Sep 17 00:00:00 2001 From: Tommi Virtanen Date: Mon, 3 Sep 2007 20:54:14 -0700 Subject: [PATCH] Make gitosis-init ignore error from non-existent config file. Refactored config file reading and logging initialization to make things nicer. --- gitosis/app.py | 44 ++++++++++++++++++++++++++++++++------------ gitosis/init.py | 7 +++++++ 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/gitosis/app.py b/gitosis/app.py index f827ac2..99830b0 100644 --- a/gitosis/app.py +++ b/gitosis/app.py @@ -2,8 +2,20 @@ import os import sys import logging import optparse +import errno import ConfigParser +log = logging.getLogger('gitosis.app') + +class CannotReadConfigError(Exception): + """Unable to read config file""" + + def __str__(self): + return '%s: %s' % (self.__doc__, ': '.join(self.args)) + +class ConfigFileDoesNotExistError(CannotReadConfigError): + """Configuration does not exist""" + class App(object): name = None @@ -13,12 +25,21 @@ class App(object): return app.main() def main(self): + self.setup_basic_logging() parser = self.create_parser() (options, args) = parser.parse_args() - cfg = self.read_config(options) + cfg = self.create_config(options) + try: + self.read_config(options, cfg) + except CannotReadConfigError, e: + log.error(str(e)) + sys.exit(1) self.setup_logging(cfg) self.handle_args(parser, cfg, options, args) + def setup_basic_logging(self): + logging.basicConfig() + def create_parser(self): parser = optparse.OptionParser() parser.set_defaults( @@ -31,24 +52,26 @@ class App(object): return parser - def read_config(self, options): + def create_config(self, options): cfg = ConfigParser.RawConfigParser() + return cfg + + def read_config(self, options, cfg): try: conffile = file(options.config) except (IOError, OSError), e: - # I trust the exception has the path. - print >>sys.stderr, '%s: Unable to read config file: %s' \ - % (options.get_prog_name(), e) - sys.exit(1) + if e.errno == errno.ENOENT: + # special case this because gitosis-init wants to + # ignore this particular error case + raise ConfigFileDoesNotExistError(str(e)) + else: + raise CannotReadConfigError(str(e)) try: cfg.readfp(conffile) finally: conffile.close() - return cfg def setup_logging(self, cfg): - logging.basicConfig() - try: loglevel = cfg.get('gitosis', 'loglevel') except (ConfigParser.NoSectionError, @@ -58,9 +81,6 @@ class App(object): try: symbolic = logging._levelNames[loglevel] except KeyError: - # need to delay error reporting until we've called - # basicConfig - log = logging.getLogger('gitosis.app') log.warning( 'Ignored invalid loglevel configuration: %r', loglevel, diff --git a/gitosis/init.py b/gitosis/init.py index ba2e4c6..0da6ed3 100644 --- a/gitosis/init.py +++ b/gitosis/init.py @@ -123,6 +123,13 @@ class Main(app.App): 'Initialize a user account for use with gitosis') return parser + def read_config(self, *a, **kw): + # ignore errors that result from non-existent config file + try: + super(Main, self).read_config(*a, **kw) + except app.ConfigFileDoesNotExistError: + pass + def handle_args(self, parser, cfg, options, args): super(Main, self).handle_args(parser, cfg, options, args)