Skip prefetching when `--no-deps` is specified (#2373)

## Summary

When running under `--no-deps`, we don't need to pre-fetch, because
pre-fetching fetches the _distribution_ metadata. But with `--no-deps`,
we only need the package metadata for the top-level requirements. We
never need distribution metadata.

Incidentally, this will fix https://github.com/astral-sh/uv/issues/2300.

## Test Plan

- `cargo test`
- `./target/debug/uv pip install --verbose --no-cache-dir --no-deps
--reinstall ddtrace==2.6.2 debugpy==1.8.1 ecdsa==0.18.0
editorconfig==0.12.4 --verbose` in a Python 3.10 Docker contain
repeatedly.
This commit is contained in:
Charlie Marsh 2024-03-11 20:44:02 -07:00 committed by GitHub
parent c159a262f2
commit 1d21e65fbc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 6 additions and 2 deletions

View File

@ -255,8 +255,12 @@ impl<'a, Provider: ResolverProvider> Resolver<'a, Provider> {
// Run unit propagation. // Run unit propagation.
state.unit_propagation(next)?; state.unit_propagation(next)?;
// Pre-visit all candidate packages, to allow metadata to be fetched in parallel. // Pre-visit all candidate packages, to allow metadata to be fetched in parallel. If
Self::pre_visit(state.partial_solution.prioritized_packages(), request_sink).await?; // the dependency mode is direct, we only need to visit the root package.
if self.dependency_mode.is_transitive() {
Self::pre_visit(state.partial_solution.prioritized_packages(), request_sink)
.await?;
}
// Choose a package version. // Choose a package version.
let Some(highest_priority_pkg) = let Some(highest_priority_pkg) =