From 9513aa01fab73f53e4fe18644c7d5b530a66c6a1 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 18 Oct 2009 23:15:55 +0200 Subject: Added frame for configuration reader involving a meta class, decorators and tests - most of which still has to be filled out --- lib/git/config.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 lib/git/config.py (limited to 'lib/git/config.py') diff --git a/lib/git/config.py b/lib/git/config.py new file mode 100644 index 00000000..c7f2c398 --- /dev/null +++ b/lib/git/config.py @@ -0,0 +1,100 @@ +# config.py +# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors +# +# This module is part of GitPython and is released under +# the BSD License: http://www.opensource.org/licenses/bsd-license.php +""" +Module containing module parser implementation able to properly read and write +configuration files +""" + +import re +from ConfigParser import RawConfigParser + +class _MetaParserBuilder(type): + """ + Utlity class wrapping methods into decorators that assure read-only properties + """ + +def _needs_values(func): + """Returns method assuring we read values (on demand) before we try to access them""" + return func + +def _ensure_writable(non_const_func): + """Return method that checks whether given non constant function may be called. + If so, the instance will be set dirty""" + + + +class GitConfigParser(RawConfigParser, object): + """ + Implements specifics required to read git style configuration files. + + This variation behaves much like the git.config command such that the configuration + will be read on demand based on the filepath given during initialization. + + The changes will automatically be written once the instance goes out of scope, but + can be triggered manually as well. + + The configuration file will be locked if you intend to change values preventing other + instances to write concurrently. + """ + __metaclass__ = _MetaParserBuilder + + OPTCRE = re.compile( + r'\s?(?P