Use a consolidated error for distribution failures (#1104)

## Summary

Use a single error type in `puffin_distribution`, rather than two
confusingly similar types between `DistributionDatabase` and the source
distribution module.

Also removes the `#[from]` for IO errors and replaces with explicit
wrapping, which is verbose but removes a bunch of incorrect error
messages.
This commit is contained in:
Charlie Marsh 2024-01-25 11:49:11 -08:00 committed by GitHub
parent 8ef819e07e
commit f36c167982
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 238 additions and 221 deletions

View file

@ -5,14 +5,12 @@ use std::fmt::Formatter;
use indexmap::IndexMap;
use pubgrub::range::Range;
use pubgrub::report::{DefaultStringReporter, DerivationTree, Reporter};
use thiserror::Error;
use url::Url;
use distribution_types::{BuiltDist, PathBuiltDist, PathSourceDist, SourceDist};
use once_map::OnceMap;
use pep440_rs::Version;
use pep508_rs::Requirement;
use puffin_distribution::DistributionDatabaseError;
use puffin_normalize::PackageName;
use crate::candidate_selector::CandidateSelector;
@ -20,7 +18,7 @@ use crate::pubgrub::{PubGrubPackage, PubGrubPython, PubGrubReportFormatter};
use crate::python_requirement::PythonRequirement;
use crate::version_map::VersionMap;
#[derive(Error, Debug)]
#[derive(Debug, thiserror::Error)]
pub enum ResolveError {
#[error("Failed to find a version of {0} that satisfies the requirement")]
NotFound(Requirement),
@ -62,16 +60,16 @@ pub enum ResolveError {
DistributionType(#[from] distribution_types::Error),
#[error("Failed to download: {0}")]
Fetch(Box<BuiltDist>, #[source] DistributionDatabaseError),
Fetch(Box<BuiltDist>, #[source] puffin_distribution::Error),
#[error("Failed to download and build: {0}")]
FetchAndBuild(Box<SourceDist>, #[source] DistributionDatabaseError),
FetchAndBuild(Box<SourceDist>, #[source] puffin_distribution::Error),
#[error("Failed to read: {0}")]
Read(Box<PathBuiltDist>, #[source] DistributionDatabaseError),
Read(Box<PathBuiltDist>, #[source] puffin_distribution::Error),
#[error("Failed to build: {0}")]
Build(Box<PathSourceDist>, #[source] DistributionDatabaseError),
Build(Box<PathSourceDist>, #[source] puffin_distribution::Error),
#[error(transparent)]
NoSolution(#[from] NoSolutionError),

View file

@ -8,7 +8,7 @@ use url::Url;
use distribution_types::Dist;
use platform_tags::Tags;
use puffin_client::{FlatIndex, RegistryClient};
use puffin_distribution::{DistributionDatabase, DistributionDatabaseError};
use puffin_distribution::DistributionDatabase;
use puffin_normalize::PackageName;
use puffin_traits::{BuildContext, NoBinary};
use pypi_types::Metadata21;
@ -18,7 +18,7 @@ use crate::version_map::VersionMap;
use crate::yanks::AllowedYanks;
type VersionMapResponse = Result<VersionMap, puffin_client::Error>;
type WheelMetadataResponse = Result<(Metadata21, Option<Url>), DistributionDatabaseError>;
type WheelMetadataResponse = Result<(Metadata21, Option<Url>), puffin_distribution::Error>;
pub trait ResolverProvider: Send + Sync {
/// Get the version map for a package.