diff options
author | xoviat <xoviat@users.noreply.github.com> | 2017-10-19 14:35:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-19 14:35:48 -0500 |
commit | ca5a81864d5fc3b6bcb1e9186a38e3fbc0d0beff (patch) | |
tree | 0e7a8fae2c656ac10451c1f40beaedf375c5ba7a /setuptools/build_meta.py | |
parent | 1cceb2cb31e10826bd6bfb1cfacfe4996a99ae63 (diff) | |
download | python-setuptools-git-ca5a81864d5fc3b6bcb1e9186a38e3fbc0d0beff.tar.gz |
BUG: look for dist-infos in subdirectories
This code is a bit ugly, but it's also been tested with the pip test suite
It's not the best solution long term (the best solution is to get the egg_info
directory directly from egg_info), but it works for now and avoids
technical risk.
Diffstat (limited to 'setuptools/build_meta.py')
-rw-r--r-- | setuptools/build_meta.py | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py index f89f82d6..609ea1e5 100644 --- a/setuptools/build_meta.py +++ b/setuptools/build_meta.py @@ -93,6 +93,11 @@ def _get_build_requires(config_settings): return requirements +def _get_immediate_subdirectories(a_dir): + return [name for name in os.listdir(a_dir) + if os.path.isdir(os.path.join(a_dir, name))] + + def get_requires_for_build_wheel(config_settings=None): config_settings = _fix_config(config_settings) return _get_build_requires(config_settings) @@ -106,11 +111,29 @@ def get_requires_for_build_sdist(config_settings=None): def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None): sys.argv = sys.argv[:1] + ['dist_info', '--egg-base', metadata_directory] _run_setup() + + dist_info_directory = metadata_directory + while True: + dist_infos = [f for f in os.listdir(dist_info_directory) + if f.endswith('.dist-info')] + + if len(dist_infos) == 0 and \ + len(_get_immediate_subdirectories(dist_info_directory)) == 1: + dist_info_directory = os.path.join( + dist_info_directory, os.listdir(dist_info_directory)[0]) + continue + + assert len(dist_infos) == 1 + break + + # PEP 517 requires that the .dist-info directory be placed in the + # metadata_directory. To comply, we MUST copy the directory to the root + if dist_info_directory != metadata_directory: + shutil.move( + os.path.join(dist_info_directory, dist_infos[0]), + metadata_directory) + shutil.rmtree(dist_info_directory, ignore_errors=True) - dist_infos = [f for f in os.listdir(metadata_directory) - if f.endswith('.dist-info')] - - assert len(dist_infos) == 1 return dist_infos[0] |