uv-resolver: use named fields for some PubGrubPackage variants

I'm planning to add another field here (markers), which puts a lot of
stress on the positional approach. So let's just switch over to named
fields.
This commit is contained in:
Andrew Gallant
2024-05-20 09:31:17 -04:00
committed by Andrew Gallant
parent 44fe0f6749
commit eac8221718
8 changed files with 216 additions and 141 deletions
@@ -53,7 +53,12 @@ impl BatchPrefetcher {
index: &InMemoryIndex,
selector: &CandidateSelector,
) -> anyhow::Result<(), ResolveError> {
let PubGrubPackage::Package(package_name, None, None) = &next else {
let PubGrubPackage::Package {
name,
extra: None,
url: None,
} = &next
else {
return Ok(());
};
@@ -66,7 +71,7 @@ impl BatchPrefetcher {
// This is immediate, we already fetched the version map.
let versions_response = index
.packages()
.wait_blocking(package_name)
.wait_blocking(name)
.ok_or(ResolveError::Unregistered)?;
let VersionsResponse::Found(ref version_map) = *versions_response else {
@@ -85,7 +90,7 @@ impl BatchPrefetcher {
previous,
} => {
if let Some(candidate) =
selector.select_no_preference(package_name, &compatible, version_map)
selector.select_no_preference(name, &compatible, version_map)
{
let compatible = compatible.intersection(
&Range::singleton(candidate.version().clone()).complement(),
@@ -103,13 +108,13 @@ impl BatchPrefetcher {
}
}
BatchPrefetchStrategy::InOrder { previous } => {
let range = if selector.use_highest_version(package_name) {
let range = if selector.use_highest_version(name) {
Range::strictly_lower_than(previous)
} else {
Range::strictly_higher_than(previous)
};
if let Some(candidate) =
selector.select_no_preference(package_name, &range, version_map)
selector.select_no_preference(name, &range, version_map)
{
phase = BatchPrefetchStrategy::InOrder {
previous: candidate.version().clone(),
@@ -148,7 +153,7 @@ impl BatchPrefetcher {
}
}
debug!("Prefetching {prefetch_count} {package_name} versions");
debug!("Prefetching {prefetch_count} {name} versions");
self.last_prefetch.insert(next.clone(), num_tried);
Ok(())
@@ -157,7 +162,7 @@ impl BatchPrefetcher {
/// Each time we tried a version for a package, we register that here.
pub(crate) fn version_tried(&mut self, package: PubGrubPackage) {
// Only track base packages, no virtual packages from extras.
if matches!(package, PubGrubPackage::Package(_, Some(_), _)) {
if matches!(package, PubGrubPackage::Package { extra: Some(_), .. }) {
return;
}
*self.tried_versions.entry(package).or_default() += 1;