Imported Upstream version 38.2.4 upstream/38.2.4
authorDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 14 Jan 2019 01:40:39 +0000 (10:40 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 14 Jan 2019 01:40:39 +0000 (10:40 +0900)
CHANGES.rst
setup.cfg
setup.py
setuptools/tests/test_wheel.py
setuptools/wheel.py

index 3886854a1cb263e60991e40d4c8a802f5b6dfecc..3694b15272c89def39d34831527f0445f81fad32 100644 (file)
@@ -1,3 +1,13 @@
+v38.2.4
+-------
+
+* #1220: Fix `data_files` handling when installing from wheel.
+
+v38.2.3
+-------
+
+* fix Travis' Python 3.3 job.
+
 v38.2.2
 -------
 
index b2e68c6f21fde143ef9b657a5116d7dcd9c32f3a..d6f1a195b539a529c078f92c03bff70f6da30fc3 100755 (executable)
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 38.2.3
+current_version = 38.2.4
 commit = True
 tag = True
 
index 61d2ceaaa467e5e62f79f56081e7351fe944bb94..0e3e42c5367b91d25c9313b7d99a8b71f6d3ad4f 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -89,7 +89,7 @@ def pypi_link(pkg_filename):
 
 setup_params = dict(
     name="setuptools",
-    version="38.2.3",
+    version="38.2.4",
     description="Easily download, build, install, upgrade, and uninstall "
         "Python packages",
     author="Python Packaging Authority",
index 408c357612eeceaed242a3be890833c0196b424c..b6be6f1f05a8fd55ce8e627ba841e4e86c84ee95 100644 (file)
@@ -444,6 +444,42 @@ WHEEL_INSTALL_TESTS = (
             '''),
     ),
 
+    dict(
+        id='data_in_package',
+        file_defs={
+            'foo': {
+                '__init__.py': '',
+                'data_dir': {
+                    'data.txt': DALS(
+                        '''
+                        Some data...
+                        '''
+                    ),
+                }
+            }
+        },
+        setup_kwargs=dict(
+            packages=['foo'],
+            data_files=[('foo/data_dir', ['foo/data_dir/data.txt'])],
+        ),
+        install_tree=DALS(
+            '''
+            foo-1.0-py{py_version}.egg/
+            |-- EGG-INFO/
+            |  |-- DESCRIPTION.rst
+            |  |-- PKG-INFO
+            |  |-- RECORD
+            |  |-- WHEEL
+            |  |-- metadata.json
+            |  |-- top_level.txt
+            |-- foo/
+            |  |-- __init__.py
+            |  |-- data_dir/
+            |  |  |-- data.txt
+            '''
+        ),
+    ),
+
 )
 
 @pytest.mark.parametrize(
index c23272133fe8c55290134a14c0cd92a64576d984..9ffe434ae3a4bf6e20f24e3ade466148848eb3bc 100644 (file)
@@ -28,6 +28,28 @@ except ImportError:
 '''
 
 
+def unpack(src_dir, dst_dir):
+    '''Move everything under `src_dir` to `dst_dir`, and delete the former.'''
+    for dirpath, dirnames, filenames in os.walk(src_dir):
+        subdir = os.path.relpath(dirpath, src_dir)
+        for f in filenames:
+            src = os.path.join(dirpath, f)
+            dst = os.path.join(dst_dir, subdir, f)
+            os.renames(src, dst)
+        for n, d in reversed(list(enumerate(dirnames))):
+            src = os.path.join(dirpath, d)
+            dst = os.path.join(dst_dir, subdir, d)
+            if not os.path.exists(dst):
+                # Directory does not exist in destination,
+                # rename it and prune it from os.walk list.
+                os.renames(src, dst)
+                del dirnames[n]
+    # Cleanup.
+    for dirpath, dirnames, filenames in os.walk(src_dir, topdown=True):
+        assert not filenames
+        os.rmdir(dirpath)
+
+
 class Wheel(object):
 
     def __init__(self, filename):
@@ -125,10 +147,7 @@ class Wheel(object):
                 os.path.join(dist_data, d)
                 for d in ('data', 'headers', 'purelib', 'platlib')
             )):
-                for entry in os.listdir(subdir):
-                    os.rename(os.path.join(subdir, entry),
-                              os.path.join(destination_eggdir, entry))
-                os.rmdir(subdir)
+                unpack(subdir, destination_eggdir)
             if os.path.exists(dist_data):
                 os.rmdir(dist_data)
             # Fix namespace packages.