Skip to content

Commit

Permalink
Merge pull request #1220 from benoit-pierre/fix_1219
Browse files Browse the repository at this point in the history
fix `data_files` handling when installing from wheel
  • Loading branch information
benoit-pierre committed Dec 4, 2017
2 parents b729553 + e1946bc commit b654e72
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 4 deletions.
5 changes: 5 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
v38.2.4
-------

* #1220: Fix `data_files` handling when installing from wheel.

v38.2.3
-------

Expand Down
36 changes: 36 additions & 0 deletions setuptools/tests/test_wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,42 @@ def __repr__(self):
'''),
),

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(
Expand Down
27 changes: 23 additions & 4 deletions setuptools/wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,28 @@
'''


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):
Expand Down Expand Up @@ -125,10 +147,7 @@ def raw_req(req):
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.
Expand Down

0 comments on commit b654e72

Please sign in to comment.