mirror of https://github.com/astral-sh/uv
Remove `Option` from preference marker (#9304)
## Summary This... _should_ be equivalent?
This commit is contained in:
parent
40844048af
commit
b9e9b60232
|
|
@ -138,23 +138,12 @@ impl CandidateSelector {
|
|||
) -> Option<Candidate> {
|
||||
// In the branches, we "sort" the preferences by marker-matching through an iterator that
|
||||
// first has the matching half and then the mismatching half.
|
||||
let preferences_match =
|
||||
preferences
|
||||
.get(package_name)
|
||||
.filter(|(marker, _index, _version)| {
|
||||
// `.unwrap_or(true)` because the universal marker is considered matching.
|
||||
marker
|
||||
.map(|marker| env.included_by_marker(marker))
|
||||
.unwrap_or(true)
|
||||
});
|
||||
let preferences_mismatch =
|
||||
preferences
|
||||
.get(package_name)
|
||||
.filter(|(marker, _index, _version)| {
|
||||
marker
|
||||
.map(|marker| !env.included_by_marker(marker))
|
||||
.unwrap_or(false)
|
||||
});
|
||||
let preferences_match = preferences
|
||||
.get(package_name)
|
||||
.filter(|(marker, _index, _version)| env.included_by_marker(marker));
|
||||
let preferences_mismatch = preferences
|
||||
.get(package_name)
|
||||
.filter(|(marker, _index, _version)| !env.included_by_marker(marker));
|
||||
let preferences = preferences_match.chain(preferences_mismatch).filter_map(
|
||||
|(marker, source, version)| {
|
||||
// If the package is mapped to an explicit index, only consider preferences that
|
||||
|
|
@ -178,7 +167,7 @@ impl CandidateSelector {
|
|||
/// Return the first preference that satisfies the current range and is allowed.
|
||||
fn get_preferred_from_iter<'a, InstalledPackages: InstalledPackagesProvider>(
|
||||
&'a self,
|
||||
preferences: impl Iterator<Item = (Option<&'a MarkerTree>, &'a Version)>,
|
||||
preferences: impl Iterator<Item = (&'a MarkerTree, &'a Version)>,
|
||||
package_name: &'a PackageName,
|
||||
range: &Range<Version>,
|
||||
version_maps: &'a [VersionMap],
|
||||
|
|
@ -226,7 +215,7 @@ impl CandidateSelector {
|
|||
AllowPrerelease::No => false,
|
||||
// If the pre-release is "global" (i.e., provided via a lockfile, rather than
|
||||
// a fork), accept it unless pre-releases are completely banned.
|
||||
AllowPrerelease::IfNecessary => marker.is_none(),
|
||||
AllowPrerelease::IfNecessary => marker.is_true(),
|
||||
};
|
||||
if !allow {
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ impl Preference {
|
|||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Entry {
|
||||
marker: Option<MarkerTree>,
|
||||
marker: MarkerTree,
|
||||
index: Option<IndexUrl>,
|
||||
pin: Pin,
|
||||
}
|
||||
|
|
@ -169,7 +169,7 @@ impl Preferences {
|
|||
slf.insert(
|
||||
preference.name,
|
||||
preference.index,
|
||||
None,
|
||||
MarkerTree::TRUE,
|
||||
Pin {
|
||||
version: preference.version,
|
||||
hashes: preference.hashes,
|
||||
|
|
@ -180,7 +180,7 @@ impl Preferences {
|
|||
slf.insert(
|
||||
preference.name.clone(),
|
||||
preference.index.clone(),
|
||||
Some(fork_marker),
|
||||
fork_marker,
|
||||
Pin {
|
||||
version: preference.version.clone(),
|
||||
hashes: preference.hashes.clone(),
|
||||
|
|
@ -198,7 +198,7 @@ impl Preferences {
|
|||
&mut self,
|
||||
package_name: PackageName,
|
||||
index: Option<IndexUrl>,
|
||||
markers: Option<MarkerTree>,
|
||||
markers: MarkerTree,
|
||||
pin: impl Into<Pin>,
|
||||
) {
|
||||
self.0.entry(package_name).or_default().push(Entry {
|
||||
|
|
@ -214,19 +214,15 @@ impl Preferences {
|
|||
) -> impl Iterator<
|
||||
Item = (
|
||||
&PackageName,
|
||||
impl Iterator<Item = (Option<&MarkerTree>, Option<&IndexUrl>, &Version)>,
|
||||
impl Iterator<Item = (&MarkerTree, Option<&IndexUrl>, &Version)>,
|
||||
),
|
||||
> {
|
||||
self.0.iter().map(|(name, preferences)| {
|
||||
(
|
||||
name,
|
||||
preferences.iter().map(|entry| {
|
||||
(
|
||||
entry.marker.as_ref(),
|
||||
entry.index.as_ref(),
|
||||
entry.pin.version(),
|
||||
)
|
||||
}),
|
||||
preferences
|
||||
.iter()
|
||||
.map(|entry| (&entry.marker, entry.index.as_ref(), entry.pin.version())),
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
@ -235,14 +231,12 @@ impl Preferences {
|
|||
pub(crate) fn get(
|
||||
&self,
|
||||
package_name: &PackageName,
|
||||
) -> impl Iterator<Item = (Option<&MarkerTree>, Option<&IndexUrl>, &Version)> {
|
||||
self.0.get(package_name).into_iter().flatten().map(|entry| {
|
||||
(
|
||||
entry.marker.as_ref(),
|
||||
entry.index.as_ref(),
|
||||
entry.pin.version(),
|
||||
)
|
||||
})
|
||||
) -> impl Iterator<Item = (&MarkerTree, Option<&IndexUrl>, &Version)> {
|
||||
self.0
|
||||
.get(package_name)
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.map(|entry| (&entry.marker, entry.index.as_ref(), entry.pin.version()))
|
||||
}
|
||||
|
||||
/// Return the hashes for a package, if the version matches that of the pin.
|
||||
|
|
|
|||
|
|
@ -382,7 +382,11 @@ impl<InstalledPackages: InstalledPackagesProvider> ResolverState<InstalledPackag
|
|||
preferences.insert(
|
||||
package.name.clone(),
|
||||
package.index.clone(),
|
||||
resolution.env.try_markers().cloned(),
|
||||
resolution
|
||||
.env
|
||||
.try_markers()
|
||||
.cloned()
|
||||
.unwrap_or(MarkerTree::TRUE),
|
||||
version.clone(),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue