summaryrefslogtreecommitdiff
path: root/setuptools
diff options
context:
space:
mode:
authorAnderson Bravalheri <andersonbravalheri@gmail.com>2022-08-15 19:35:10 +0100
committerAnderson Bravalheri <andersonbravalheri@gmail.com>2022-08-15 19:35:10 +0100
commit39b7f64c91a28587959bfddb5a53298799e00d39 (patch)
tree90b9d2a9735b0323f9685762d6d539f77aad2082 /setuptools
parent40fb3369d90b3ebad620e6f23cc682272783f908 (diff)
downloadpython-setuptools-git-39b7f64c91a28587959bfddb5a53298799e00d39.tar.gz
Refactor code to bubble up info directories in build_meta
Diffstat (limited to 'setuptools')
-rw-r--r--setuptools/build_meta.py43
1 files changed, 18 insertions, 25 deletions
diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py
index 3a256259..ad5b904b 100644
--- a/setuptools/build_meta.py
+++ b/setuptools/build_meta.py
@@ -36,10 +36,11 @@ import contextlib
import tempfile
import warnings
from pathlib import Path
-from typing import Dict, Iterator, List, Optional, Union
+from typing import Dict, Iterator, List, Optional, Union, Tuple
import setuptools
import distutils
+from . import errors
from ._path import same_path
from ._reqs import parse_strings
from ._deprecation_warning import SetuptoolsDeprecationWarning
@@ -346,30 +347,22 @@ class _BuildMetaBackend(_ConfigSettingsTranslator):
Returns the basename of the info directory, e.g. `proj-0.0.0.dist-info`.
"""
- 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
-
- 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)
-
- return dist_infos[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):