summaryrefslogtreecommitdiff
path: root/git/repo/base.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2017-02-25 10:32:32 +0100
committerGitHub <noreply@github.com>2017-02-25 10:32:32 +0100
commit0181a40db75bb27277bec6e0802f09a45f84ffb3 (patch)
tree978e1228a90c1c798fc0203ae173a41bc6cb2aa0 /git/repo/base.py
parent88732b694068704cb151e0c4256a8e8d1adaff38 (diff)
parentf858c449a993124939e9082dcea796c5a13d0a74 (diff)
downloadgitpython-0181a40db75bb27277bec6e0802f09a45f84ffb3.tar.gz
Merge pull request #555 from ankostis/cntxtmman
Retrofit `repo` class as context-man to cleanup global mman on repo-delete
Diffstat (limited to 'git/repo/base.py')
-rw-r--r--git/repo/base.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/git/repo/base.py b/git/repo/base.py
index 85f2d036..ace5223f 100644
--- a/git/repo/base.py
+++ b/git/repo/base.py
@@ -33,6 +33,8 @@ from git.util import Actor, finalize_process, decygpath, hex_to_bin
import os.path as osp
from .fun import rev_parse, is_git_dir, find_submodule_git_dir, touch
+import gc
+import gitdb
log = logging.getLogger(__name__)
@@ -177,9 +179,21 @@ class Repo(object):
args.append(self.git)
self.odb = odbt(*args)
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.close()
+
def __del__(self):
+ self.close()
+
+ def close(self):
if self.git:
self.git.clear_cache()
+ gc.collect()
+ gitdb.util.mman.collect()
+ gc.collect()
def __eq__(self, rhs):
if isinstance(rhs, Repo):