summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2019-05-26 08:05:11 +0200
committerGitHub <noreply@github.com>2019-05-26 08:05:11 +0200
commita5ac590309fb00da755f1f91f32afdcf9cb4f0cf (patch)
tree5697a81f5064f4a9ef27e4bc742023ecb2e18dbf
parent7f6c9cfa52a47f4df81e753965bc37ca430e8e21 (diff)
parent90ac3877a742b52a78c82e40b94f11e11962d0e2 (diff)
downloadsetuptools-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.rst9
-rw-r--r--src/setuptools_scm/file_finder_git.py26
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")