Ensure requirements are prepared before get_dist()

The legacy resolver seems to prepare requirements differently that can
leave them half-done in certain code paths. I'm not quite sure how it's
doing things, but at least we can do this to make sure they do things
right.
This commit is contained in:
Tzu-ping Chung 2023-07-12 02:54:10 +08:00
parent ea727e4d6a
commit 0cabefbce8
3 changed files with 10 additions and 2 deletions

View File

@ -130,7 +130,6 @@ class DownloadCommand(RequirementCommand):
self.trace_basic_info(finder)
requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
requirement_set.warn_legacy_versions_and_specifiers()
downloaded: List[str] = []
for req in requirement_set.requirements.values():
@ -138,6 +137,10 @@ class DownloadCommand(RequirementCommand):
assert req.name is not None
preparer.save_linked_requirement(req)
downloaded.append(req.name)
preparer.prepare_linked_requirements_more(requirement_set.requirements.values())
requirement_set.warn_legacy_versions_and_specifiers()
if downloaded:
write_output("Successfully downloaded %s", " ".join(downloaded))

View File

@ -145,7 +145,6 @@ class WheelCommand(RequirementCommand):
self.trace_basic_info(finder)
requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
requirement_set.warn_legacy_versions_and_specifiers()
reqs_to_build: List[InstallRequirement] = []
for req in requirement_set.requirements.values():
@ -154,6 +153,9 @@ class WheelCommand(RequirementCommand):
elif should_build_for_wheel_command(req):
reqs_to_build.append(req)
preparer.prepare_linked_requirements_more(requirement_set.requirements.values())
requirement_set.warn_legacy_versions_and_specifiers()
# build wheels
build_successes, build_failures = build(
reqs_to_build,

View File

@ -159,6 +159,9 @@ class Resolver(BaseResolver):
reqs = req_set.all_requirements
self.factory.preparer.prepare_linked_requirements_more(reqs)
for req in reqs:
req.prepared = True
req.needs_more_preparation = False
return req_set
def get_installation_order(