diff options
| author | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2022-08-15 21:02:08 +0100 |
|---|---|---|
| committer | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2022-08-15 21:02:08 +0100 |
| commit | bc68a60192ef5f54f8fc36c5d776f6dbabd6c1a2 (patch) | |
| tree | 512ece8b5da12318e74541d4430f20da4fc54ed1 /setuptools | |
| parent | b5b195a4a21bfa49b32a5c0aa73237aa3ec74736 (diff) | |
| parent | 01b8529d39d97e46367a29f7bcca5a9ab0ef5f47 (diff) | |
| download | python-setuptools-git-bc68a60192ef5f54f8fc36c5d776f6dbabd6c1a2.tar.gz | |
Fix build_meta when metadata_directory=='.' (#3528)
Diffstat (limited to 'setuptools')
| -rw-r--r-- | setuptools/build_meta.py | 18 | ||||
| -rw-r--r-- | setuptools/tests/test_build_meta.py | 17 |
2 files changed, 30 insertions, 5 deletions
diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py index 98fb148a..8ff9a5ce 100644 --- a/setuptools/build_meta.py +++ b/setuptools/build_meta.py @@ -40,6 +40,7 @@ from typing import Dict, Iterator, List, Optional, Union import setuptools import distutils +from . import errors from ._path import same_path from ._reqs import parse_strings from ._deprecation_warning import SetuptoolsDeprecationWarning @@ -346,16 +347,23 @@ class _BuildMetaBackend(_ConfigSettingsTranslator): Returns the basename of the info directory, e.g. `proj-0.0.0.dist-info`. """ - candidates = list(Path(metadata_directory).glob(f"**/*{suffix}/")) - assert len(candidates) == 1, f"Exactly one {suffix} should have been produced" - info_dir = candidates[0] - + info_dir = self._find_info_directory(metadata_directory, suffix) if not same_path(info_dir.parent, metadata_directory): shutil.move(str(info_dir), metadata_directory) # PEP 517 allow other files and dirs to exist in metadata_directory - return info_dir.name + def _find_info_directory(self, metadata_directory: str, suffix: str) -> Path: + for parent, dirs, _ in os.walk(metadata_directory): + candidates = [f for f in dirs if f.endswith(suffix)] + + if len(candidates) != 0 or len(dirs) != 1: + assert len(candidates) == 1, f"Multiple {suffix} directories found" + return Path(parent, candidates[0]) + + msg = f"No {suffix} directory found in {metadata_directory}" + raise errors.InternalError(msg) + def prepare_metadata_for_build_wheel(self, metadata_directory, config_settings=None): sys.argv = [ diff --git a/setuptools/tests/test_build_meta.py b/setuptools/tests/test_build_meta.py index e70c71bd..bf1c27ff 100644 --- a/setuptools/tests/test_build_meta.py +++ b/setuptools/tests/test_build_meta.py @@ -485,6 +485,23 @@ class TestBuildMetaBackend: assert os.path.isfile(os.path.join(dist_dir, dist_info, 'METADATA')) + def test_prepare_metadata_inplace(self, build_backend): + """ + Some users might pass metadata_directory pre-populated with `.tox` or `.venv`. + See issue #3523. + """ + for pre_existing in [ + ".tox/python/lib/python3.10/site-packages/attrs-22.1.0.dist-info", + ".tox/python/lib/python3.10/site-packages/autocommand-2.2.1.dist-info", + ".nox/python/lib/python3.10/site-packages/build-0.8.0.dist-info", + ".venv/python3.10/site-packages/click-8.1.3.dist-info", + "venv/python3.10/site-packages/distlib-0.3.5.dist-info", + "env/python3.10/site-packages/docutils-0.19.dist-info", + ]: + os.makedirs(pre_existing, exist_ok=True) + dist_info = build_backend.prepare_metadata_for_build_wheel(".") + assert os.path.isfile(os.path.join(dist_info, 'METADATA')) + def test_build_sdist_explicit_dist(self, build_backend): # explicitly specifying the dist folder should work # the folder sdist_directory and the ``--dist-dir`` can be the same |
