aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/archive_util.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2014-05-17 23:09:56 -0400
committerJason R. Coombs <jaraco@jaraco.com>2014-05-17 23:09:56 -0400
commit0f7f8d71dc1c8eda869c423a324064d4bc419879 (patch)
tree4967353555bf29f2c721aa6a60c6d998c19eeb5d /setuptools/archive_util.py
parent14f168f249c86085dbf9f67fdc8d6a5b801946a0 (diff)
downloadexternal_python_setuptools-0f7f8d71dc1c8eda869c423a324064d4bc419879.tar.gz
external_python_setuptools-0f7f8d71dc1c8eda869c423a324064d4bc419879.tar.bz2
external_python_setuptools-0f7f8d71dc1c8eda869c423a324064d4bc419879.zip
Use ContextualZipFile and contextlib.closing for archiveutil
Diffstat (limited to 'setuptools/archive_util.py')
-rwxr-xr-xsetuptools/archive_util.py12
1 files changed, 4 insertions, 8 deletions
diff --git a/setuptools/archive_util.py b/setuptools/archive_util.py
index a5be2f98..67a67e23 100755
--- a/setuptools/archive_util.py
+++ b/setuptools/archive_util.py
@@ -11,7 +11,8 @@ import tarfile
import os
import shutil
import posixpath
-from pkg_resources import ensure_directory
+import contextlib
+from pkg_resources import ensure_directory, ContextualZipFile
from distutils.errors import DistutilsError
class UnrecognizedFormat(DistutilsError):
@@ -92,8 +93,7 @@ def unpack_zipfile(filename, extract_dir, progress_filter=default_filter):
if not zipfile.is_zipfile(filename):
raise UnrecognizedFormat("%s is not a zip file" % (filename,))
- z = zipfile.ZipFile(filename)
- try:
+ with ContextualZipFile(filename) as z:
for info in z.infolist():
name = info.filename
@@ -121,8 +121,6 @@ def unpack_zipfile(filename, extract_dir, progress_filter=default_filter):
unix_attributes = info.external_attr >> 16
if unix_attributes:
os.chmod(target, unix_attributes)
- finally:
- z.close()
def unpack_tarfile(filename, extract_dir, progress_filter=default_filter):
@@ -138,7 +136,7 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter):
raise UnrecognizedFormat(
"%s is not a compressed or uncompressed tar file" % (filename,)
)
- try:
+ with contextlib.closing(tarobj):
tarobj.chown = lambda *args: None # don't do any chowning!
for member in tarobj:
name = member.name
@@ -164,7 +162,5 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter):
except tarfile.ExtractError:
pass # chown/chmod/mkfifo/mknode/makedev failed
return True
- finally:
- tarobj.close()
extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile