summaryrefslogtreecommitdiff
path: root/git/config.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2015-01-06 14:05:30 +0100
committerSebastian Thiel <byronimo@gmail.com>2015-01-06 14:05:30 +0100
commita05e49d2419d65c59c65adf5cd8c05f276550e1d (patch)
tree62d8284dbccfee635babe9c46ad5a059f5da0bde /git/config.py
parent60e54133aa1105a1270f0a42e74813f75cd2dc46 (diff)
downloadgitpython-a05e49d2419d65c59c65adf5cd8c05f276550e1d.tar.gz
test_repo works
Diffstat (limited to 'git/config.py')
-rw-r--r--git/config.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/git/config.py b/git/config.py
index 96991b84..c7e8b7ac 100644
--- a/git/config.py
+++ b/git/config.py
@@ -103,8 +103,7 @@ class SectionConstraint(object):
# Yes, for some reason, we have to call it explicitly for it to work in PY3 !
# Apparently __del__ doesn't get call anymore if refcount becomes 0
# Ridiculous ... .
- self._config.__del__()
- # del self._config
+ self._config.release()
def __getattr__(self, attr):
if attr in self._valid_attrs_:
@@ -121,6 +120,10 @@ class SectionConstraint(object):
"""return: Configparser instance we constrain"""
return self._config
+ def release(self):
+ """Equivalent to GitConfigParser.release(), which is called on our underlying parser instance"""
+ return self._config.release()
+
class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, object)):
@@ -198,6 +201,13 @@ class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, obje
def __del__(self):
"""Write pending changes if required and release locks"""
+ # NOTE: only consistent in PY2
+ self.release()
+
+ def release(self):
+ """Flush changes and release the configuration write lock. This instance must not be used anymore afterwards.
+ In Python 3, it's required to explicitly release locks and flush changes, as __del__ is not called
+ deterministically anymore."""
# checking for the lock here makes sure we do not raise during write()
# in case an invalid parser was created who could not get a lock
if self.read_only or (self._lock and not self._lock._has_lock()):