Make target Python version an optional field (#4000)

## Summary

Instead of checking if the target and installed version are the same, we
model the data such that the target version is only present if it was
specified by the user. This also means that we correctly say "requested
version" even if the two happen to be the same.
This commit is contained in:
Charlie Marsh 2024-06-03 18:37:15 -04:00 committed by GitHub
parent 037e7e345c
commit 77e93157fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 61 additions and 35 deletions

View file

@ -308,7 +308,9 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
debug!(
"Solving with target Python version {}",
self.python_requirement.target()
self.python_requirement
.target()
.unwrap_or(self.python_requirement.installed())
);
'FORK: while let Some(mut state) = forked_states.pop() {
@ -715,9 +717,7 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
// The version is incompatible due to its Python requirement.
if let Some(requires_python) = metadata.requires_python.as_ref() {
let installed = self.python_requirement.installed();
let target = self.python_requirement.target();
if target != installed {
if let Some(target) = self.python_requirement.target() {
if !requires_python.contains(target) {
return Ok(Some(ResolverVersion::Unavailable(
version.clone(),
@ -730,6 +730,8 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
)));
}
}
let installed = self.python_requirement.installed();
if !requires_python.contains(installed) {
return Ok(Some(ResolverVersion::Unavailable(
version.clone(),