aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2017-12-24 19:18:59 -0600
committerGitHub <noreply@github.com>2017-12-24 19:18:59 -0600
commit1ad2c11ca1d8535c61215b184d18bf713ef813c9 (patch)
treed59aa23daa67db73200b82c7c39e1a117fd719c7
parente001996ab483c7c725e8894f560fb84c43150bcc (diff)
parent0d0baed8da468b2cedb9aa6caf60dc15fdeebd34 (diff)
downloadexternal_python_setuptools-1ad2c11ca1d8535c61215b184d18bf713ef813c9.tar.gz
external_python_setuptools-1ad2c11ca1d8535c61215b184d18bf713ef813c9.tar.bz2
external_python_setuptools-1ad2c11ca1d8535c61215b184d18bf713ef813c9.zip
Merge pull request #1232 from duggelz/dgreiman/issue118838.2.5
Fix trailing slash handling in pkg_resources.ZipProvider
-rw-r--r--CHANGES.rst5
-rw-r--r--pkg_resources/__init__.py3
-rw-r--r--pkg_resources/tests/test_pkg_resources.py35
-rwxr-xr-xsetup.cfg2
-rwxr-xr-xsetup.py2
5 files changed, 45 insertions, 2 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index 3694b152..7227b7fe 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,3 +1,8 @@
+v38.2.5
+-------
+
+* #1232: Fix trailing slash handling in ``pkg_resources.ZipProvider``.
+
v38.2.4
-------
diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py
index 73334641..08f9bbe7 100644
--- a/pkg_resources/__init__.py
+++ b/pkg_resources/__init__.py
@@ -1693,6 +1693,9 @@ class ZipProvider(EggProvider):
def _zipinfo_name(self, fspath):
# Convert a virtual filename (full path to file) into a zipfile subpath
# usable with the zipimport directory cache for our target archive
+ fspath = fspath.rstrip(os.sep)
+ if fspath == self.loader.archive:
+ return ''
if fspath.startswith(self.zip_pre):
return fspath[len(self.zip_pre):]
raise AssertionError(
diff --git a/pkg_resources/tests/test_pkg_resources.py b/pkg_resources/tests/test_pkg_resources.py
index c6a7ac97..f2c00b29 100644
--- a/pkg_resources/tests/test_pkg_resources.py
+++ b/pkg_resources/tests/test_pkg_resources.py
@@ -62,10 +62,21 @@ class TestZipProvider(object):
zip_info.filename = 'data.dat'
zip_info.date_time = cls.ref_time.timetuple()
zip_egg.writestr(zip_info, 'hello, world!')
+ zip_info = zipfile.ZipInfo()
+ zip_info.filename = 'subdir/mod2.py'
+ zip_info.date_time = cls.ref_time.timetuple()
+ zip_egg.writestr(zip_info, 'x = 6\n')
+ zip_info = zipfile.ZipInfo()
+ zip_info.filename = 'subdir/data2.dat'
+ zip_info.date_time = cls.ref_time.timetuple()
+ zip_egg.writestr(zip_info, 'goodbye, world!')
zip_egg.close()
egg.close()
sys.path.append(egg.name)
+ subdir = os.path.join(egg.name, 'subdir')
+ sys.path.append(subdir)
+ cls.finalizers.append(EggRemover(subdir))
cls.finalizers.append(EggRemover(egg.name))
@classmethod
@@ -73,6 +84,30 @@ class TestZipProvider(object):
for finalizer in cls.finalizers:
finalizer()
+ def test_resource_listdir(self):
+ import mod
+ zp = pkg_resources.ZipProvider(mod)
+
+ expected_root = ['data.dat', 'mod.py', 'subdir']
+ assert sorted(zp.resource_listdir('')) == expected_root
+ assert sorted(zp.resource_listdir('/')) == expected_root
+
+ expected_subdir = ['data2.dat', 'mod2.py']
+ assert sorted(zp.resource_listdir('subdir')) == expected_subdir
+ assert sorted(zp.resource_listdir('subdir/')) == expected_subdir
+
+ assert zp.resource_listdir('nonexistent') == []
+ assert zp.resource_listdir('nonexistent/') == []
+
+ import mod2
+ zp2 = pkg_resources.ZipProvider(mod2)
+
+ assert sorted(zp2.resource_listdir('')) == expected_subdir
+ assert sorted(zp2.resource_listdir('/')) == expected_subdir
+
+ assert zp2.resource_listdir('subdir') == []
+ assert zp2.resource_listdir('subdir/') == []
+
def test_resource_filename_rewrites_on_change(self):
"""
If a previous call to get_resource_filename has saved the file, but
diff --git a/setup.cfg b/setup.cfg
index d6f1a195..0a33329c 100755
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 38.2.4
+current_version = 38.2.5
commit = True
tag = True
diff --git a/setup.py b/setup.py
index 0e3e42c5..af799e46 100755
--- a/setup.py
+++ b/setup.py
@@ -89,7 +89,7 @@ def pypi_link(pkg_filename):
setup_params = dict(
name="setuptools",
- version="38.2.4",
+ version="38.2.5",
description="Easily download, build, install, upgrade, and uninstall "
"Python packages",
author="Python Packaging Authority",