Avoid unnecessarily fetching non-marker-required first-party dependencies (#318)

E.g., given:

```
flask; python_version < '3.7'
requests
```

We shouldn't request the metadata for Flask when on Python versions 3.7
or later.
This commit is contained in:
Charlie Marsh 2023-11-04 10:03:43 -07:00 committed by GitHub
parent 051188dce0
commit a53188cac7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -129,35 +129,11 @@ impl<'a, Context: BuildContext + Sync> Resolver<'a, Context> {
let mut priorities = PubGrubPriorities::default();
// Push all the requirements into the package sink.
for requirement in &self.requirements {
debug!("Adding root dependency: {requirement}");
let package_name = requirement.name.clone();
match &requirement.version_or_url {
// If this is a registry-based package, fetch the package metadata.
None | Some(pep508_rs::VersionOrUrl::VersionSpecifier(_)) => {
if in_flight.insert_package(&package_name) {
priorities.add(package_name.clone());
request_sink.unbounded_send(Request::Package(package_name))?;
}
}
// If this is a URL-based package, fetch the source.
Some(pep508_rs::VersionOrUrl::Url(url)) => {
if in_flight.insert_url(url) {
priorities.add(package_name.clone());
if WheelFilename::try_from(url).is_ok() {
request_sink.unbounded_send(Request::WheelUrl(
package_name.clone(),
url.clone(),
))?;
} else {
request_sink.unbounded_send(Request::SdistUrl(
package_name.clone(),
url.clone(),
))?;
}
}
}
}
for (package, version) in
iter_requirements(self.requirements.iter(), None, None, self.markers)
{
debug!("Adding root dependency: {package} {version}");
Self::visit_package(&package, &mut priorities, &mut in_flight, request_sink)?;
}
// Start the solve.