diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2019-05-26 08:05:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-26 08:05:11 +0200 |
commit | a5ac590309fb00da755f1f91f32afdcf9cb4f0cf (patch) | |
tree | 5697a81f5064f4a9ef27e4bc742023ecb2e18dbf | |
parent | 7f6c9cfa52a47f4df81e753965bc37ca430e8e21 (diff) | |
parent | 90ac3877a742b52a78c82e40b94f11e11962d0e2 (diff) | |
download | setuptools-scm-a5ac590309fb00da755f1f91f32afdcf9cb4f0cf.tar.gz |
Merge pull request #306 from RonnyPfannschmidt/fix-305
fix #305 - close fd in the git archive handling
-rw-r--r-- | CHANGELOG.rst | 9 | ||||
-rw-r--r-- | src/setuptools_scm/file_finder_git.py | 26 |
2 files changed, 24 insertions, 11 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 6cea125..aa17219 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,12 @@ + +* fix #305 - ensure the git file finder closes filedescriptors even when errors happen + + +v3.3.3 +====== + +* add eggs for python3.7 and 3.8 to the deploy + v3.3.2 ====== diff --git a/src/setuptools_scm/file_finder_git.py b/src/setuptools_scm/file_finder_git.py index b7b55ed..5cda162 100644 --- a/src/setuptools_scm/file_finder_git.py +++ b/src/setuptools_scm/file_finder_git.py @@ -28,16 +28,16 @@ def _git_toplevel(path): def _git_interpret_archive(fd, toplevel): - tf = tarfile.open(fileobj=fd, mode="r|*") - git_files = set() - git_dirs = {toplevel} - for member in tf.getmembers(): - name = os.path.normcase(member.name).replace("/", os.path.sep) - if member.type == tarfile.DIRTYPE: - git_dirs.add(name) - else: - git_files.add(name) - return git_files, git_dirs + with tarfile.open(fileobj=fd, mode="r|*") as tf: + git_files = set() + git_dirs = {toplevel} + for member in tf.getmembers(): + name = os.path.normcase(member.name).replace("/", os.path.sep) + if member.type == tarfile.DIRTYPE: + git_dirs.add(name) + else: + git_files.add(name) + return git_files, git_dirs def _git_ls_files_and_dirs(toplevel): @@ -46,7 +46,11 @@ def _git_ls_files_and_dirs(toplevel): cmd = ["git", "archive", "--prefix", toplevel + os.path.sep, "HEAD"] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd=toplevel) try: - return _git_interpret_archive(proc.stdout, toplevel) + try: + return _git_interpret_archive(proc.stdout, toplevel) + finally: + # ensure we avoid ressource warnings by cleaning up the pocess + proc.wait() except Exception: if proc.wait() != 0: log.exception("listing git files failed - pretending there aren't any") |