mirror of
https://github.com/astral-sh/uv.git
synced 2025-10-02 23:04:37 +00:00
Move availability enums into their own module (#3858)
This commit is contained in:
parent
31b0ff6373
commit
14fa49b7ba
2 changed files with 116 additions and 107 deletions
112
crates/uv-resolver/src/resolver/availability.rs
Normal file
112
crates/uv-resolver/src/resolver/availability.rs
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
use std::fmt::{Display, Formatter};
|
||||||
|
|
||||||
|
use distribution_types::IncompatibleDist;
|
||||||
|
use pep440_rs::Version;
|
||||||
|
|
||||||
|
/// The reason why a package or a version cannot be used.
|
||||||
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||||
|
pub(crate) enum UnavailableReason {
|
||||||
|
/// The entire package cannot be used.
|
||||||
|
Package(UnavailablePackage),
|
||||||
|
/// A single version cannot be used.
|
||||||
|
Version(UnavailableVersion),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for UnavailableReason {
|
||||||
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Self::Version(version) => Display::fmt(version, f),
|
||||||
|
Self::Package(package) => Display::fmt(package, f),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The package version is unavailable and cannot be used. Unlike [`PackageUnavailable`], this
|
||||||
|
/// applies to a single version of the package.
|
||||||
|
///
|
||||||
|
/// Most variant are from [`MetadataResponse`] without the error source (since we don't format
|
||||||
|
/// the source).
|
||||||
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||||
|
pub(crate) enum UnavailableVersion {
|
||||||
|
/// Version is incompatible because it has no usable distributions
|
||||||
|
IncompatibleDist(IncompatibleDist),
|
||||||
|
/// The wheel metadata was found, but could not be parsed.
|
||||||
|
InvalidMetadata,
|
||||||
|
/// The wheel metadata was found, but the metadata was inconsistent.
|
||||||
|
InconsistentMetadata,
|
||||||
|
/// The wheel has an invalid structure.
|
||||||
|
InvalidStructure,
|
||||||
|
/// The wheel metadata was not found in the cache and the network is not available.
|
||||||
|
Offline,
|
||||||
|
/// Forward any kind of resolver error.
|
||||||
|
ResolverError(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for UnavailableVersion {
|
||||||
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
UnavailableVersion::IncompatibleDist(invalid_dist) => Display::fmt(invalid_dist, f),
|
||||||
|
UnavailableVersion::InvalidMetadata => f.write_str("has invalid metadata"),
|
||||||
|
UnavailableVersion::InconsistentMetadata => f.write_str("has inconsistent metadata"),
|
||||||
|
UnavailableVersion::InvalidStructure => f.write_str("has an invalid package format"),
|
||||||
|
UnavailableVersion::Offline => f.write_str(
|
||||||
|
"network connectivity is disabled, but the metadata wasn't found in the cache",
|
||||||
|
),
|
||||||
|
UnavailableVersion::ResolverError(err) => f.write_str(err),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The package is unavailable and cannot be used.
|
||||||
|
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||||
|
pub(crate) enum UnavailablePackage {
|
||||||
|
/// Index lookups were disabled (i.e., `--no-index`) and the package was not found in a flat index (i.e. from `--find-links`).
|
||||||
|
NoIndex,
|
||||||
|
/// Network requests were disabled (i.e., `--offline`), and the package was not found in the cache.
|
||||||
|
Offline,
|
||||||
|
/// The package was not found in the registry.
|
||||||
|
NotFound,
|
||||||
|
/// The package metadata was found, but could not be parsed.
|
||||||
|
InvalidMetadata(String),
|
||||||
|
/// The package has an invalid structure.
|
||||||
|
InvalidStructure(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl UnavailablePackage {
|
||||||
|
pub(crate) fn as_str(&self) -> &'static str {
|
||||||
|
match self {
|
||||||
|
UnavailablePackage::NoIndex => "was not found in the provided package locations",
|
||||||
|
UnavailablePackage::Offline => "was not found in the cache",
|
||||||
|
UnavailablePackage::NotFound => "was not found in the package registry",
|
||||||
|
UnavailablePackage::InvalidMetadata(_) => "has invalid metadata",
|
||||||
|
UnavailablePackage::InvalidStructure(_) => "has an invalid package format",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for UnavailablePackage {
|
||||||
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||||
|
f.write_str(self.as_str())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The package is unavailable at specific versions.
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub(crate) enum IncompletePackage {
|
||||||
|
/// Network requests were disabled (i.e., `--offline`), and the wheel metadata was not found in the cache.
|
||||||
|
Offline,
|
||||||
|
/// The wheel metadata was found, but could not be parsed.
|
||||||
|
InvalidMetadata(String),
|
||||||
|
/// The wheel metadata was found, but the metadata was inconsistent.
|
||||||
|
InconsistentMetadata(String),
|
||||||
|
/// The wheel has an invalid structure.
|
||||||
|
InvalidStructure(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub(crate) enum ResolverVersion {
|
||||||
|
/// A usable version
|
||||||
|
Available(Version),
|
||||||
|
/// A version that is not usable for some reason
|
||||||
|
Unavailable(Version, UnavailableVersion),
|
||||||
|
}
|
|
@ -48,6 +48,9 @@ use crate::pubgrub::{
|
||||||
};
|
};
|
||||||
use crate::python_requirement::PythonRequirement;
|
use crate::python_requirement::PythonRequirement;
|
||||||
use crate::resolution::ResolutionGraph;
|
use crate::resolution::ResolutionGraph;
|
||||||
|
pub(crate) use crate::resolver::availability::{
|
||||||
|
IncompletePackage, ResolverVersion, UnavailablePackage, UnavailableReason, UnavailableVersion,
|
||||||
|
};
|
||||||
use crate::resolver::batch_prefetch::BatchPrefetcher;
|
use crate::resolver::batch_prefetch::BatchPrefetcher;
|
||||||
pub(crate) use crate::resolver::index::FxOnceMap;
|
pub(crate) use crate::resolver::index::FxOnceMap;
|
||||||
pub use crate::resolver::index::InMemoryIndex;
|
pub use crate::resolver::index::InMemoryIndex;
|
||||||
|
@ -60,6 +63,7 @@ pub use crate::resolver::reporter::{BuildId, Reporter};
|
||||||
use crate::yanks::AllowedYanks;
|
use crate::yanks::AllowedYanks;
|
||||||
use crate::{DependencyMode, Exclusions, FlatIndex, Options};
|
use crate::{DependencyMode, Exclusions, FlatIndex, Options};
|
||||||
|
|
||||||
|
mod availability;
|
||||||
mod batch_prefetch;
|
mod batch_prefetch;
|
||||||
mod index;
|
mod index;
|
||||||
mod locals;
|
mod locals;
|
||||||
|
@ -67,113 +71,6 @@ mod provider;
|
||||||
mod reporter;
|
mod reporter;
|
||||||
mod urls;
|
mod urls;
|
||||||
|
|
||||||
/// The reason why a package or a version cannot be used.
|
|
||||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
|
||||||
pub(crate) enum UnavailableReason {
|
|
||||||
/// The entire package cannot be used.
|
|
||||||
Package(UnavailablePackage),
|
|
||||||
/// A single version cannot be used.
|
|
||||||
Version(UnavailableVersion),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Display for UnavailableReason {
|
|
||||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
||||||
match self {
|
|
||||||
Self::Version(version) => Display::fmt(version, f),
|
|
||||||
Self::Package(package) => Display::fmt(package, f),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The package version is unavailable and cannot be used. Unlike [`PackageUnavailable`], this
|
|
||||||
/// applies to a single version of the package.
|
|
||||||
///
|
|
||||||
/// Most variant are from [`MetadataResponse`] without the error source (since we don't format
|
|
||||||
/// the source).
|
|
||||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
|
||||||
pub(crate) enum UnavailableVersion {
|
|
||||||
/// Version is incompatible because it has no usable distributions
|
|
||||||
IncompatibleDist(IncompatibleDist),
|
|
||||||
/// The wheel metadata was found, but could not be parsed.
|
|
||||||
InvalidMetadata,
|
|
||||||
/// The wheel metadata was found, but the metadata was inconsistent.
|
|
||||||
InconsistentMetadata,
|
|
||||||
/// The wheel has an invalid structure.
|
|
||||||
InvalidStructure,
|
|
||||||
/// The wheel metadata was not found in the cache and the network is not available.
|
|
||||||
Offline,
|
|
||||||
/// Forward any kind of resolver error.
|
|
||||||
ResolverError(String),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Display for UnavailableVersion {
|
|
||||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
||||||
match self {
|
|
||||||
UnavailableVersion::IncompatibleDist(invalid_dist) => Display::fmt(invalid_dist, f),
|
|
||||||
UnavailableVersion::InvalidMetadata => f.write_str("has invalid metadata"),
|
|
||||||
UnavailableVersion::InconsistentMetadata => f.write_str("has inconsistent metadata"),
|
|
||||||
UnavailableVersion::InvalidStructure => f.write_str("has an invalid package format"),
|
|
||||||
UnavailableVersion::Offline => f.write_str(
|
|
||||||
"network connectivity is disabled, but the metadata wasn't found in the cache",
|
|
||||||
),
|
|
||||||
UnavailableVersion::ResolverError(err) => f.write_str(err),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The package is unavailable and cannot be used.
|
|
||||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
|
||||||
pub(crate) enum UnavailablePackage {
|
|
||||||
/// Index lookups were disabled (i.e., `--no-index`) and the package was not found in a flat index (i.e. from `--find-links`).
|
|
||||||
NoIndex,
|
|
||||||
/// Network requests were disabled (i.e., `--offline`), and the package was not found in the cache.
|
|
||||||
Offline,
|
|
||||||
/// The package was not found in the registry.
|
|
||||||
NotFound,
|
|
||||||
/// The package metadata was found, but could not be parsed.
|
|
||||||
InvalidMetadata(String),
|
|
||||||
/// The package has an invalid structure.
|
|
||||||
InvalidStructure(String),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl UnavailablePackage {
|
|
||||||
pub(crate) fn as_str(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
UnavailablePackage::NoIndex => "was not found in the provided package locations",
|
|
||||||
UnavailablePackage::Offline => "was not found in the cache",
|
|
||||||
UnavailablePackage::NotFound => "was not found in the package registry",
|
|
||||||
UnavailablePackage::InvalidMetadata(_) => "has invalid metadata",
|
|
||||||
UnavailablePackage::InvalidStructure(_) => "has an invalid package format",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Display for UnavailablePackage {
|
|
||||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
||||||
f.write_str(self.as_str())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The package is unavailable at specific versions.
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub(crate) enum IncompletePackage {
|
|
||||||
/// Network requests were disabled (i.e., `--offline`), and the wheel metadata was not found in the cache.
|
|
||||||
Offline,
|
|
||||||
/// The wheel metadata was found, but could not be parsed.
|
|
||||||
InvalidMetadata(String),
|
|
||||||
/// The wheel metadata was found, but the metadata was inconsistent.
|
|
||||||
InconsistentMetadata(String),
|
|
||||||
/// The wheel has an invalid structure.
|
|
||||||
InvalidStructure(String),
|
|
||||||
}
|
|
||||||
|
|
||||||
enum ResolverVersion {
|
|
||||||
/// A usable version
|
|
||||||
Available(Version),
|
|
||||||
/// A version that is not usable for some reason
|
|
||||||
Unavailable(Version, UnavailableVersion),
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Resolver<Provider: ResolverProvider, InstalledPackages: InstalledPackagesProvider> {
|
pub struct Resolver<Provider: ResolverProvider, InstalledPackages: InstalledPackagesProvider> {
|
||||||
state: ResolverState<InstalledPackages>,
|
state: ResolverState<InstalledPackages>,
|
||||||
provider: Provider,
|
provider: Provider,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue