diff options
-rw-r--r-- | TODO | 10 | ||||
-rw-r--r-- | lib/git/cmd.py | 15 | ||||
-rw-r--r-- | test/testlib/helper.py | 4 |
3 files changed, 25 insertions, 4 deletions
@@ -11,9 +11,13 @@ General a sha or ref unless cat-file is used where it must be a sha * Overhaul command caching - currently its possible to create many instances of the std-in command types, as it appears they are not killed when the repo gets - deleted. A clear() method could already help to allow long-running programs - to remove cached commands after an idle time. - + deleted. +* git command on windows may be killed using the /F options which probably is like + SIGKILL. This is bad as the process might be doing something, leaving the resource + locked and/or in an inconsistent state. Without the /F option, git does not terminate + itself, probably it listens to SIGINT which is not sent by TASKKILL. We can't really + help it, but may be at some point git handles windows signals properly. + Object ------ * DataStream method should read the data itself. This would be easy once you have diff --git a/lib/git/cmd.py b/lib/git/cmd.py index 97d6613d..6d712ca9 100644 --- a/lib/git/cmd.py +++ b/lib/git/cmd.py @@ -17,7 +17,7 @@ execute_kwargs = ('istream', 'with_keep_cwd', 'with_extended_output', 'output_stream' ) extra = {} -# NOTE: Execution through a shell appears to be slightly faster, but in fact +# NOTE: Execution through a shell on windows appears to be slightly faster, but in fact # I consider it a problem whenever complex strings are passed and *interpreted* # by the shell beforehand. This can cause great confusion and reduces compatability # between the OS which is why the shell should not be used ( unless it does not work @@ -401,3 +401,16 @@ class Git(object): cmd.stdout.read(1) # finishing newlines return (hexsha, typename, size, data) + + def clear_cache(self): + """ + Clear all kinds of internal caches to release resources. + + Currently persistent commands will be interrupted. + + Returns + self + """ + self.cat_file_all = None + self.cat_file_header = None + return self diff --git a/test/testlib/helper.py b/test/testlib/helper.py index 27c2b3d9..5599f05e 100644 --- a/test/testlib/helper.py +++ b/test/testlib/helper.py @@ -82,6 +82,7 @@ def with_bare_rw_repo(func): try: return func(self, rw_repo) finally: + rw_repo.git.clear_cache() shutil.rmtree(repo_dir) # END cleanup # END bare repo creator @@ -107,6 +108,7 @@ def with_rw_repo(working_tree_ref): try: return func(self, rw_repo) finally: + rw_repo.git.clear_cache() shutil.rmtree(repo_dir) # END cleanup # END rw repo creator @@ -179,6 +181,8 @@ def with_rw_and_rw_remote_repo(working_tree_ref): try: return func(self, rw_repo, rw_remote_repo) finally: + rw_repo.git.clear_cache() + rw_remote_repo.git.clear_cache() shutil.rmtree(repo_dir) shutil.rmtree(remote_repo_dir) # END cleanup |