Make gitosis-init ignore error from non-existent config file.
Refactored config file reading and logging initialization to make things nicer.
This commit is contained in:
parent
96216c231e
commit
1dfe84754a
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue