Move lowered requirement source type out of uv-pypi-types (#12356)

## Summary

This crate is for standards-compliant types, but this is explicitly a
type that's custom to uv. It's also strange because we kind of want to
reference `IndexUrl` on the registry type, but that's in a crate that
_depends_ on `uv-pypi-types`, which to me is a sign that this is off.
This commit is contained in:
Charlie Marsh 2025-03-20 18:16:12 -07:00 committed by GitHub
parent cf20d9a1ca
commit 46967723bb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
58 changed files with 145 additions and 160 deletions

6
Cargo.lock generated
View file

@ -4927,11 +4927,11 @@ dependencies = [
"uv-cache", "uv-cache",
"uv-cache-info", "uv-cache-info",
"uv-cache-key", "uv-cache-key",
"uv-distribution-types",
"uv-normalize", "uv-normalize",
"uv-pep440", "uv-pep440",
"uv-pep508", "uv-pep508",
"uv-platform-tags", "uv-platform-tags",
"uv-pypi-types",
"uv-static", "uv-static",
"which", "which",
] ]
@ -5112,6 +5112,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"thiserror 2.0.12", "thiserror 2.0.12",
"toml",
"tracing", "tracing",
"url", "url",
"uv-auth", "uv-auth",
@ -5467,12 +5468,10 @@ dependencies = [
"serde", "serde",
"serde-untagged", "serde-untagged",
"thiserror 2.0.12", "thiserror 2.0.12",
"toml",
"toml_edit", "toml_edit",
"tracing", "tracing",
"url", "url",
"uv-distribution-filename", "uv-distribution-filename",
"uv-fs",
"uv-git-types", "uv-git-types",
"uv-normalize", "uv-normalize",
"uv-pep440", "uv-pep440",
@ -5763,6 +5762,7 @@ dependencies = [
"tracing", "tracing",
"uv-cache", "uv-cache",
"uv-dirs", "uv-dirs",
"uv-distribution-types",
"uv-fs", "uv-fs",
"uv-install-wheel", "uv-install-wheel",
"uv-installer", "uv-installer",

View file

@ -4,7 +4,7 @@ use uv_bench::criterion::black_box;
use uv_bench::criterion::{criterion_group, criterion_main, measurement::WallTime, Criterion}; use uv_bench::criterion::{criterion_group, criterion_main, measurement::WallTime, Criterion};
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::RegistryClientBuilder; use uv_client::RegistryClientBuilder;
use uv_pypi_types::Requirement; use uv_distribution_types::Requirement;
use uv_python::PythonEnvironment; use uv_python::PythonEnvironment;
use uv_resolver::Manifest; use uv_resolver::Manifest;

View file

@ -29,11 +29,11 @@ use tracing::{debug, info_span, instrument, Instrument};
use uv_configuration::{BuildKind, BuildOutput, ConfigSettings, SourceStrategy}; use uv_configuration::{BuildKind, BuildOutput, ConfigSettings, SourceStrategy};
use uv_distribution::BuildRequires; use uv_distribution::BuildRequires;
use uv_distribution_types::{IndexLocations, Resolution}; use uv_distribution_types::{IndexLocations, Requirement, Resolution};
use uv_fs::{PythonExt, Simplified}; use uv_fs::{PythonExt, Simplified};
use uv_pep440::Version; use uv_pep440::Version;
use uv_pep508::PackageName; use uv_pep508::PackageName;
use uv_pypi_types::{Requirement, VerbatimParsedUrl}; use uv_pypi_types::VerbatimParsedUrl;
use uv_python::{Interpreter, PythonEnvironment}; use uv_python::{Interpreter, PythonEnvironment};
use uv_static::EnvVars; use uv_static::EnvVars;
use uv_types::{AnyErrorBuild, BuildContext, BuildIsolation, BuildStack, SourceBuildTrait}; use uv_types::{AnyErrorBuild, BuildContext, BuildIsolation, BuildStack, SourceBuildTrait};

View file

@ -20,11 +20,11 @@ uv-auth = { workspace = true }
uv-cache = { workspace = true } uv-cache = { workspace = true }
uv-cache-info = { workspace = true } uv-cache-info = { workspace = true }
uv-cache-key = { workspace = true } uv-cache-key = { workspace = true }
uv-distribution-types = { workspace = true }
uv-normalize = { workspace = true } uv-normalize = { workspace = true }
uv-pep440 = { workspace = true } uv-pep440 = { workspace = true }
uv-pep508 = { workspace = true, features = ["schemars"] } uv-pep508 = { workspace = true, features = ["schemars"] }
uv-platform-tags = { workspace = true } uv-platform-tags = { workspace = true }
uv-pypi-types = { workspace = true }
uv-static = { workspace = true } uv-static = { workspace = true }
clap = { workspace = true, features = ["derive"], optional = true } clap = { workspace = true, features = ["derive"], optional = true }

View file

@ -3,9 +3,9 @@ use std::borrow::Cow;
use either::Either; use either::Either;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use uv_distribution_types::{Requirement, RequirementSource};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep508::MarkerTree; use uv_pep508::MarkerTree;
use uv_pypi_types::{Requirement, RequirementSource};
/// A set of constraints for a set of requirements. /// A set of constraints for a set of requirements.
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]

View file

@ -3,9 +3,9 @@ use std::borrow::Cow;
use either::Either; use either::Either;
use rustc_hash::{FxBuildHasher, FxHashMap}; use rustc_hash::{FxBuildHasher, FxHashMap};
use uv_distribution_types::Requirement;
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep508::MarkerTree; use uv_pep508::MarkerTree;
use uv_pypi_types::Requirement;
/// A set of overrides for a set of requirements. /// A set of overrides for a set of requirements.
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]

View file

@ -1,11 +1,12 @@
use either::Either;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use uv_pep508::PackageName;
use either::Either;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use uv_cache::Refresh; use uv_cache::Refresh;
use uv_cache_info::Timestamp; use uv_cache_info::Timestamp;
use uv_pypi_types::Requirement; use uv_distribution_types::Requirement;
use uv_pep508::PackageName;
/// Whether to reinstall packages. /// Whether to reinstall packages.
#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)] #[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]

View file

@ -24,11 +24,11 @@ use uv_distribution::DistributionDatabase;
use uv_distribution_filename::DistFilename; use uv_distribution_filename::DistFilename;
use uv_distribution_types::{ use uv_distribution_types::{
CachedDist, DependencyMetadata, Identifier, IndexCapabilities, IndexLocations, CachedDist, DependencyMetadata, Identifier, IndexCapabilities, IndexLocations,
IsBuildBackendError, Name, Resolution, SourceDist, VersionOrUrlRef, IsBuildBackendError, Name, Requirement, Resolution, SourceDist, VersionOrUrlRef,
}; };
use uv_git::GitResolver; use uv_git::GitResolver;
use uv_installer::{Installer, Plan, Planner, Preparer, SitePackages}; use uv_installer::{Installer, Plan, Planner, Preparer, SitePackages};
use uv_pypi_types::{Conflicts, Requirement}; use uv_pypi_types::Conflicts;
use uv_python::{Interpreter, PythonEnvironment}; use uv_python::{Interpreter, PythonEnvironment};
use uv_resolver::{ use uv_resolver::{
ExcludeNewer, FlatIndex, Flexibility, InMemoryIndex, Manifest, OptionsBuilder, ExcludeNewer, FlatIndex, Flexibility, InMemoryIndex, Manifest, OptionsBuilder,

View file

@ -46,3 +46,8 @@ thiserror = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
url = { workspace = true } url = { workspace = true }
version-ranges = { workspace = true } version-ranges = { workspace = true }
[dev-dependencies]
toml = { workspace = true }

View file

@ -71,6 +71,7 @@ pub use crate::origin::*;
pub use crate::pip_index::*; pub use crate::pip_index::*;
pub use crate::prioritized_distribution::*; pub use crate::prioritized_distribution::*;
pub use crate::requested::*; pub use crate::requested::*;
pub use crate::requirement::*;
pub use crate::resolution::*; pub use crate::resolution::*;
pub use crate::resolved::*; pub use crate::resolved::*;
pub use crate::specified_requirement::*; pub use crate::specified_requirement::*;
@ -96,6 +97,7 @@ mod origin;
mod pip_index; mod pip_index;
mod prioritized_distribution; mod prioritized_distribution;
mod requested; mod requested;
mod requirement;
mod resolution; mod resolution;
mod resolved; mod resolved;
mod specified_requirement; mod specified_requirement;

View file

@ -15,7 +15,7 @@ use uv_pep508::{
marker, MarkerEnvironment, MarkerTree, RequirementOrigin, VerbatimUrl, VersionOrUrl, marker, MarkerEnvironment, MarkerTree, RequirementOrigin, VerbatimUrl, VersionOrUrl,
}; };
use crate::{ use uv_pypi_types::{
ConflictItem, Hashes, ParsedArchiveUrl, ParsedDirectoryUrl, ParsedGitUrl, ParsedPathUrl, ConflictItem, Hashes, ParsedArchiveUrl, ParsedDirectoryUrl, ParsedGitUrl, ParsedPathUrl,
ParsedUrl, ParsedUrlError, VerbatimParsedUrl, ParsedUrl, ParsedUrlError, VerbatimParsedUrl,
}; };

View file

@ -1,9 +1,9 @@
use uv_distribution_filename::DistExtension; use uv_distribution_filename::DistExtension;
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep508::MarkerTree; use uv_pep508::MarkerTree;
use uv_pypi_types::{HashDigest, HashDigests, RequirementSource}; use uv_pypi_types::{HashDigest, HashDigests};
use crate::{BuiltDist, Diagnostic, Dist, Name, ResolvedDist, SourceDist}; use crate::{BuiltDist, Diagnostic, Dist, Name, RequirementSource, ResolvedDist, SourceDist};
/// A set of packages pinned at specific versions. /// A set of packages pinned at specific versions.
/// ///

View file

@ -3,9 +3,9 @@ use std::fmt::{Display, Formatter};
use uv_normalize::ExtraName; use uv_normalize::ExtraName;
use uv_pep508::{MarkerEnvironment, UnnamedRequirement}; use uv_pep508::{MarkerEnvironment, UnnamedRequirement};
use uv_pypi_types::{Hashes, Requirement, RequirementSource}; use uv_pypi_types::Hashes;
use crate::VerbatimParsedUrl; use crate::{Requirement, RequirementSource, VerbatimParsedUrl};
/// An [`UnresolvedRequirement`] with additional metadata from `requirements.txt`, currently only /// An [`UnresolvedRequirement`] with additional metadata from `requirements.txt`, currently only
/// hashes but in the future also editable and similar information. /// hashes but in the future also editable and similar information.

View file

@ -2,7 +2,7 @@ use std::collections::BTreeMap;
use std::path::Path; use std::path::Path;
use uv_configuration::SourceStrategy; use uv_configuration::SourceStrategy;
use uv_distribution_types::IndexLocations; use uv_distribution_types::{IndexLocations, Requirement};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_workspace::pyproject::ToolUvSources; use uv_workspace::pyproject::ToolUvSources;
use uv_workspace::{ use uv_workspace::{
@ -15,7 +15,7 @@ use crate::metadata::{LoweredRequirement, MetadataError};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct BuildRequires { pub struct BuildRequires {
pub name: Option<PackageName>, pub name: Option<PackageName>,
pub requires_dist: Vec<uv_pypi_types::Requirement>, pub requires_dist: Vec<Requirement>,
} }
impl BuildRequires { impl BuildRequires {
@ -27,7 +27,7 @@ impl BuildRequires {
requires_dist: metadata requires_dist: metadata
.requires_dist .requires_dist
.into_iter() .into_iter()
.map(uv_pypi_types::Requirement::from) .map(Requirement::from)
.collect(), .collect(),
} }
} }
@ -124,10 +124,7 @@ impl BuildRequires {
}) })
}) })
.collect::<Result<Vec<_>, _>>()?, .collect::<Result<Vec<_>, _>>()?,
SourceStrategy::Disabled => requires_dist SourceStrategy::Disabled => requires_dist.into_iter().map(Requirement::from).collect(),
.into_iter()
.map(uv_pypi_types::Requirement::from)
.collect(),
}; };
Ok(Self { Ok(Self {
@ -199,10 +196,7 @@ impl BuildRequires {
}) })
}) })
.collect::<Result<Vec<_>, _>>()?, .collect::<Result<Vec<_>, _>>()?,
SourceStrategy::Disabled => requires_dist SourceStrategy::Disabled => requires_dist.into_iter().map(Requirement::from).collect(),
.into_iter()
.map(uv_pypi_types::Requirement::from)
.collect(),
}; };
Ok(Self { Ok(Self {

View file

@ -7,14 +7,14 @@ use thiserror::Error;
use url::Url; use url::Url;
use uv_distribution_filename::DistExtension; use uv_distribution_filename::DistExtension;
use uv_distribution_types::{Index, IndexLocations, IndexName, Origin}; use uv_distribution_types::{
Index, IndexLocations, IndexName, Origin, Requirement, RequirementSource,
};
use uv_git_types::{GitReference, GitUrl, GitUrlParseError}; use uv_git_types::{GitReference, GitUrl, GitUrlParseError};
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::VersionSpecifiers; use uv_pep440::VersionSpecifiers;
use uv_pep508::{looks_like_git_repository, MarkerTree, VerbatimUrl, VersionOrUrl}; use uv_pep508::{looks_like_git_repository, MarkerTree, VerbatimUrl, VersionOrUrl};
use uv_pypi_types::{ use uv_pypi_types::{ConflictItem, ParsedUrlError, VerbatimParsedUrl};
ConflictItem, ParsedUrlError, Requirement, RequirementSource, VerbatimParsedUrl,
};
use uv_workspace::pyproject::{PyProjectToml, Source, Sources}; use uv_workspace::pyproject::{PyProjectToml, Source, Sources};
use uv_workspace::Workspace; use uv_workspace::Workspace;

View file

@ -4,7 +4,7 @@ use std::path::Path;
use thiserror::Error; use thiserror::Error;
use uv_configuration::SourceStrategy; use uv_configuration::SourceStrategy;
use uv_distribution_types::{GitSourceUrl, IndexLocations}; use uv_distribution_types::{GitSourceUrl, IndexLocations, Requirement};
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers}; use uv_pep440::{Version, VersionSpecifiers};
use uv_pypi_types::{HashDigests, ResolutionMetadata}; use uv_pypi_types::{HashDigests, ResolutionMetadata};
@ -46,10 +46,10 @@ pub struct Metadata {
pub name: PackageName, pub name: PackageName,
pub version: Version, pub version: Version,
// Optional fields // Optional fields
pub requires_dist: Vec<uv_pypi_types::Requirement>, pub requires_dist: Vec<Requirement>,
pub requires_python: Option<VersionSpecifiers>, pub requires_python: Option<VersionSpecifiers>,
pub provides_extras: Vec<ExtraName>, pub provides_extras: Vec<ExtraName>,
pub dependency_groups: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>, pub dependency_groups: BTreeMap<GroupName, Vec<Requirement>>,
pub dynamic: bool, pub dynamic: bool,
} }
@ -63,7 +63,7 @@ impl Metadata {
requires_dist: metadata requires_dist: metadata
.requires_dist .requires_dist
.into_iter() .into_iter()
.map(uv_pypi_types::Requirement::from) .map(Requirement::from)
.collect(), .collect(),
requires_python: metadata.requires_python, requires_python: metadata.requires_python,
provides_extras: metadata.provides_extras, provides_extras: metadata.provides_extras,

View file

@ -5,7 +5,7 @@ use std::slice;
use rustc_hash::FxHashSet; use rustc_hash::FxHashSet;
use uv_configuration::SourceStrategy; use uv_configuration::SourceStrategy;
use uv_distribution_types::IndexLocations; use uv_distribution_types::{IndexLocations, Requirement};
use uv_normalize::{ExtraName, GroupName, PackageName, DEV_DEPENDENCIES}; use uv_normalize::{ExtraName, GroupName, PackageName, DEV_DEPENDENCIES};
use uv_pep508::MarkerTree; use uv_pep508::MarkerTree;
use uv_workspace::dependency_groups::FlatDependencyGroups; use uv_workspace::dependency_groups::FlatDependencyGroups;
@ -18,9 +18,9 @@ use crate::Metadata;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct RequiresDist { pub struct RequiresDist {
pub name: PackageName, pub name: PackageName,
pub requires_dist: Vec<uv_pypi_types::Requirement>, pub requires_dist: Vec<Requirement>,
pub provides_extras: Vec<ExtraName>, pub provides_extras: Vec<ExtraName>,
pub dependency_groups: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>, pub dependency_groups: BTreeMap<GroupName, Vec<Requirement>>,
pub dynamic: bool, pub dynamic: bool,
} }
@ -33,7 +33,7 @@ impl RequiresDist {
requires_dist: metadata requires_dist: metadata
.requires_dist .requires_dist
.into_iter() .into_iter()
.map(uv_pypi_types::Requirement::from) .map(Requirement::from)
.collect(), .collect(),
provides_extras: metadata.provides_extras, provides_extras: metadata.provides_extras,
dependency_groups: BTreeMap::default(), dependency_groups: BTreeMap::default(),
@ -186,15 +186,11 @@ impl RequiresDist {
) )
}) })
.collect::<Result<Vec<_>, _>>(), .collect::<Result<Vec<_>, _>>(),
SourceStrategy::Disabled => Ok(requirements SourceStrategy::Disabled => {
.into_iter() Ok(requirements.into_iter().map(Requirement::from).collect())
.map(uv_pypi_types::Requirement::from) }
.collect()),
}?; }?;
Ok::<(GroupName, Vec<uv_pypi_types::Requirement>), MetadataError>(( Ok::<(GroupName, Vec<Requirement>), MetadataError>((name, requirements))
name,
requirements,
))
}) })
.collect::<Result<BTreeMap<_, _>, _>>()?; .collect::<Result<BTreeMap<_, _>, _>>()?;
@ -227,10 +223,7 @@ impl RequiresDist {
}) })
}) })
.collect::<Result<Vec<_>, _>>()?, .collect::<Result<Vec<_>, _>>()?,
SourceStrategy::Disabled => requires_dist SourceStrategy::Disabled => requires_dist.into_iter().map(Requirement::from).collect(),
.into_iter()
.map(uv_pypi_types::Requirement::from)
.collect(),
}; };
Ok(Self { Ok(Self {
@ -360,14 +353,11 @@ impl From<Metadata> for RequiresDist {
/// The [`FlatRequiresDist`] struct is used to flatten out the recursive dependencies, i.e., convert /// The [`FlatRequiresDist`] struct is used to flatten out the recursive dependencies, i.e., convert
/// from the former to the latter. /// from the former to the latter.
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct FlatRequiresDist(Vec<uv_pypi_types::Requirement>); pub struct FlatRequiresDist(Vec<Requirement>);
impl FlatRequiresDist { impl FlatRequiresDist {
/// Flatten a set of requirements, resolving any self-references. /// Flatten a set of requirements, resolving any self-references.
pub fn from_requirements( pub fn from_requirements(requirements: Vec<Requirement>, name: &PackageName) -> Self {
requirements: Vec<uv_pypi_types::Requirement>,
name: &PackageName,
) -> Self {
// If there are no self-references, we can return early. // If there are no self-references, we can return early.
if requirements.iter().all(|req| req.name != *name) { if requirements.iter().all(|req| req.name != *name) {
return Self(requirements); return Self(requirements);
@ -400,7 +390,7 @@ impl FlatRequiresDist {
let requirement = { let requirement = {
let mut marker = marker; let mut marker = marker;
marker.and(requirement.marker); marker.and(requirement.marker);
uv_pypi_types::Requirement { Requirement {
name: requirement.name.clone(), name: requirement.name.clone(),
extras: requirement.extras.clone(), extras: requirement.extras.clone(),
groups: requirement.groups.clone(), groups: requirement.groups.clone(),
@ -434,7 +424,7 @@ impl FlatRequiresDist {
for req in &requirements { for req in &requirements {
if req.name == *name { if req.name == *name {
if !req.source.is_empty() { if !req.source.is_empty() {
flattened.push(uv_pypi_types::Requirement { flattened.push(Requirement {
name: req.name.clone(), name: req.name.clone(),
extras: vec![], extras: vec![],
groups: req.groups.clone(), groups: req.groups.clone(),
@ -450,14 +440,14 @@ impl FlatRequiresDist {
} }
/// Consume the [`FlatRequiresDist`] and return the inner vector. /// Consume the [`FlatRequiresDist`] and return the inner vector.
pub fn into_inner(self) -> Vec<uv_pypi_types::Requirement> { pub fn into_inner(self) -> Vec<Requirement> {
self.0 self.0
} }
} }
impl IntoIterator for FlatRequiresDist { impl IntoIterator for FlatRequiresDist {
type Item = uv_pypi_types::Requirement; type Item = Requirement;
type IntoIter = std::vec::IntoIter<uv_pypi_types::Requirement>; type IntoIter = std::vec::IntoIter<Requirement>;
fn into_iter(self) -> Self::IntoIter { fn into_iter(self) -> Self::IntoIter {
self.0.into_iter() self.0.into_iter()

View file

@ -10,11 +10,11 @@ use uv_distribution::{
}; };
use uv_distribution_types::{ use uv_distribution_types::{
BuiltDist, CachedDirectUrlDist, CachedDist, Dist, Error, Hashed, IndexLocations, InstalledDist, BuiltDist, CachedDirectUrlDist, CachedDist, Dist, Error, Hashed, IndexLocations, InstalledDist,
Name, Resolution, ResolvedDist, SourceDist, Name, RequirementSource, Resolution, ResolvedDist, SourceDist,
}; };
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_platform_tags::Tags; use uv_platform_tags::Tags;
use uv_pypi_types::{RequirementSource, VerbatimParsedUrl}; use uv_pypi_types::VerbatimParsedUrl;
use uv_python::PythonEnvironment; use uv_python::PythonEnvironment;
use uv_types::HashStrategy; use uv_types::HashStrategy;

View file

@ -6,9 +6,9 @@ use url::Url;
use uv_cache_info::CacheInfo; use uv_cache_info::CacheInfo;
use uv_cache_key::{CanonicalUrl, RepositoryUrl}; use uv_cache_key::{CanonicalUrl, RepositoryUrl};
use uv_distribution_types::{InstalledDirectUrlDist, InstalledDist}; use uv_distribution_types::{InstalledDirectUrlDist, InstalledDist, RequirementSource};
use uv_git_types::GitOid; use uv_git_types::GitOid;
use uv_pypi_types::{DirInfo, DirectUrl, RequirementSource, VcsInfo, VcsKind}; use uv_pypi_types::{DirInfo, DirectUrl, VcsInfo, VcsKind};
#[derive(Debug, Copy, Clone)] #[derive(Debug, Copy, Clone)]
pub(crate) enum RequirementSatisfaction { pub(crate) enum RequirementSatisfaction {

View file

@ -9,14 +9,14 @@ use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet};
use url::Url; use url::Url;
use uv_distribution_types::{ use uv_distribution_types::{
Diagnostic, InstalledDist, Name, NameRequirementSpecification, UnresolvedRequirement, Diagnostic, InstalledDist, Name, NameRequirementSpecification, Requirement,
UnresolvedRequirementSpecification, UnresolvedRequirement, UnresolvedRequirementSpecification,
}; };
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep440::{Version, VersionSpecifiers}; use uv_pep440::{Version, VersionSpecifiers};
use uv_pep508::VersionOrUrl; use uv_pep508::VersionOrUrl;
use uv_pypi_types::{Requirement, ResolverMarkerEnvironment, VerbatimParsedUrl}; use uv_pypi_types::{ResolverMarkerEnvironment, VerbatimParsedUrl};
use uv_python::{Interpreter, PythonEnvironment}; use uv_python::{Interpreter, PythonEnvironment};
use uv_types::InstalledPackagesProvider; use uv_types::InstalledPackagesProvider;
use uv_warnings::warn_user; use uv_warnings::warn_user;

View file

@ -17,7 +17,6 @@ workspace = true
[dependencies] [dependencies]
uv-distribution-filename = { workspace = true } uv-distribution-filename = { workspace = true }
uv-fs = { workspace = true, features = ["serde"] }
uv-git-types = { workspace = true } uv-git-types = { workspace = true }
uv-normalize = { workspace = true } uv-normalize = { workspace = true }
uv-pep440 = { workspace = true } uv-pep440 = { workspace = true }
@ -37,7 +36,6 @@ schemars = { workspace = true, optional = true }
serde = { workspace = true } serde = { workspace = true }
serde-untagged = { workspace = true } serde-untagged = { workspace = true }
thiserror = { workspace = true } thiserror = { workspace = true }
toml = { workspace = true }
toml_edit = { workspace = true } toml_edit = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
url = { workspace = true } url = { workspace = true }

View file

@ -7,7 +7,6 @@ pub use lenient_requirement::*;
pub use marker_environment::*; pub use marker_environment::*;
pub use metadata::*; pub use metadata::*;
pub use parsed_url::*; pub use parsed_url::*;
pub use requirement::*;
pub use scheme::*; pub use scheme::*;
pub use simple_json::*; pub use simple_json::*;
pub use supported_environments::*; pub use supported_environments::*;
@ -21,7 +20,6 @@ mod lenient_requirement;
mod marker_environment; mod marker_environment;
mod metadata; mod metadata;
mod parsed_url; mod parsed_url;
mod requirement;
mod scheme; mod scheme;
mod simple_json; mod simple_json;
mod supported_environments; mod supported_environments;

View file

@ -48,10 +48,12 @@ use url::Url;
use uv_client::BaseClient; use uv_client::BaseClient;
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_configuration::{NoBinary, NoBuild, PackageNameSpecifier}; use uv_configuration::{NoBinary, NoBuild, PackageNameSpecifier};
use uv_distribution_types::{UnresolvedRequirement, UnresolvedRequirementSpecification}; use uv_distribution_types::{
Requirement, UnresolvedRequirement, UnresolvedRequirementSpecification,
};
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_pep508::{expand_env_vars, Pep508Error, RequirementOrigin, VerbatimUrl}; use uv_pep508::{expand_env_vars, Pep508Error, RequirementOrigin, VerbatimUrl};
use uv_pypi_types::{Requirement, VerbatimParsedUrl}; use uv_pypi_types::VerbatimParsedUrl;
use crate::requirement::EditableError; use crate::requirement::EditableError;
pub use crate::requirement::RequirementsTxtRequirement; pub use crate::requirement::RequirementsTxtRequirement;

View file

@ -4,7 +4,7 @@ use futures::{stream::FuturesOrdered, TryStreamExt};
use uv_distribution::{DistributionDatabase, Reporter}; use uv_distribution::{DistributionDatabase, Reporter};
use uv_distribution_types::DistributionMetadata; use uv_distribution_types::DistributionMetadata;
use uv_pypi_types::Requirement; use uv_distribution_types::Requirement;
use uv_resolver::{InMemoryIndex, MetadataResponse}; use uv_resolver::{InMemoryIndex, MetadataResponse};
use uv_types::{BuildContext, HashStrategy}; use uv_types::{BuildContext, HashStrategy};

View file

@ -5,8 +5,9 @@ pub use crate::sources::*;
pub use crate::specification::*; pub use crate::specification::*;
pub use crate::unnamed::*; pub use crate::unnamed::*;
use uv_distribution_types::{Dist, DistErrorKind, GitSourceDist, SourceDist}; use uv_distribution_types::{
use uv_pypi_types::{Requirement, RequirementSource}; Dist, DistErrorKind, GitSourceDist, Requirement, RequirementSource, SourceDist,
};
mod extras; mod extras;
mod lookahead; mod lookahead;

View file

@ -7,8 +7,7 @@ use tracing::trace;
use uv_configuration::{Constraints, Overrides}; use uv_configuration::{Constraints, Overrides};
use uv_distribution::{DistributionDatabase, Reporter}; use uv_distribution::{DistributionDatabase, Reporter};
use uv_distribution_types::{Dist, DistributionMetadata}; use uv_distribution_types::{Dist, DistributionMetadata, Requirement, RequirementSource};
use uv_pypi_types::{Requirement, RequirementSource};
use uv_resolver::{InMemoryIndex, MetadataResponse, ResolverEnvironment}; use uv_resolver::{InMemoryIndex, MetadataResponse, ResolverEnvironment};
use uv_types::{BuildContext, HashStrategy, RequestedRequirements}; use uv_types::{BuildContext, HashStrategy, RequestedRequirements};

View file

@ -9,13 +9,13 @@ use url::Url;
use uv_configuration::{DependencyGroups, ExtrasSpecification}; use uv_configuration::{DependencyGroups, ExtrasSpecification};
use uv_distribution::{DistributionDatabase, FlatRequiresDist, Reporter, RequiresDist}; use uv_distribution::{DistributionDatabase, FlatRequiresDist, Reporter, RequiresDist};
use uv_distribution_types::Requirement;
use uv_distribution_types::{ use uv_distribution_types::{
BuildableSource, DirectorySourceUrl, HashGeneration, HashPolicy, SourceUrl, VersionId, BuildableSource, DirectorySourceUrl, HashGeneration, HashPolicy, SourceUrl, VersionId,
}; };
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_normalize::{ExtraName, PackageName}; use uv_normalize::{ExtraName, PackageName};
use uv_pep508::RequirementOrigin; use uv_pep508::RequirementOrigin;
use uv_pypi_types::Requirement;
use uv_resolver::{InMemoryIndex, MetadataResponse}; use uv_resolver::{InMemoryIndex, MetadataResponse};
use uv_types::{BuildContext, HashStrategy}; use uv_types::{BuildContext, HashStrategy};

View file

@ -36,6 +36,7 @@ use tracing::instrument;
use uv_cache_key::CanonicalUrl; use uv_cache_key::CanonicalUrl;
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_configuration::{DependencyGroups, NoBinary, NoBuild}; use uv_configuration::{DependencyGroups, NoBinary, NoBuild};
use uv_distribution_types::Requirement;
use uv_distribution_types::{ use uv_distribution_types::{
IndexUrl, NameRequirementSpecification, UnresolvedRequirement, IndexUrl, NameRequirementSpecification, UnresolvedRequirement,
UnresolvedRequirementSpecification, UnresolvedRequirementSpecification,
@ -43,7 +44,6 @@ use uv_distribution_types::{
use uv_fs::{Simplified, CWD}; use uv_fs::{Simplified, CWD};
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep508::{MarkerTree, UnnamedRequirement, UnnamedRequirementUrl}; use uv_pep508::{MarkerTree, UnnamedRequirement, UnnamedRequirementUrl};
use uv_pypi_types::Requirement;
use uv_pypi_types::VerbatimParsedUrl; use uv_pypi_types::VerbatimParsedUrl;
use uv_requirements_txt::{RequirementsTxt, RequirementsTxtRequirement}; use uv_requirements_txt::{RequirementsTxt, RequirementsTxtRequirement};
use uv_warnings::warn_user; use uv_warnings::warn_user;

View file

@ -9,20 +9,21 @@ use serde::Deserialize;
use tracing::debug; use tracing::debug;
use url::Host; use url::Host;
use crate::Error;
use uv_distribution::{DistributionDatabase, Reporter}; use uv_distribution::{DistributionDatabase, Reporter};
use uv_distribution_filename::{DistExtension, SourceDistFilename, WheelFilename}; use uv_distribution_filename::{DistExtension, SourceDistFilename, WheelFilename};
use uv_distribution_types::{ use uv_distribution_types::{
BuildableSource, DirectSourceUrl, DirectorySourceUrl, GitSourceUrl, PathSourceUrl, BuildableSource, DirectSourceUrl, DirectorySourceUrl, GitSourceUrl, PathSourceUrl,
RemoteSource, SourceUrl, VersionId, RemoteSource, Requirement, SourceUrl, VersionId,
}; };
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep508::{UnnamedRequirement, VersionOrUrl}; use uv_pep508::{UnnamedRequirement, VersionOrUrl};
use uv_pypi_types::{Metadata10, Requirement}; use uv_pypi_types::Metadata10;
use uv_pypi_types::{ParsedUrl, VerbatimParsedUrl}; use uv_pypi_types::{ParsedUrl, VerbatimParsedUrl};
use uv_resolver::{InMemoryIndex, MetadataResponse}; use uv_resolver::{InMemoryIndex, MetadataResponse};
use uv_types::{BuildContext, HashStrategy}; use uv_types::{BuildContext, HashStrategy};
use crate::Error;
/// Like [`RequirementsSpecification`], but with concrete names for all requirements. /// Like [`RequirementsSpecification`], but with concrete names for all requirements.
pub struct NamedRequirementsResolver<'a, Context: BuildContext> { pub struct NamedRequirementsResolver<'a, Context: BuildContext> {
/// Whether to check hashes for distributions. /// Whether to check hashes for distributions.

View file

@ -25,10 +25,11 @@ use uv_distribution_filename::{
BuildTag, DistExtension, ExtensionError, SourceDistExtension, WheelFilename, BuildTag, DistExtension, ExtensionError, SourceDistExtension, WheelFilename,
}; };
use uv_distribution_types::{ use uv_distribution_types::{
BuiltDist, DependencyMetadata, DirectUrlBuiltDist, DirectUrlSourceDist, DirectorySourceDist, redact_credentials, BuiltDist, DependencyMetadata, DirectUrlBuiltDist, DirectUrlSourceDist,
Dist, DistributionMetadata, FileLocation, GitSourceDist, IndexLocations, IndexUrl, Name, DirectorySourceDist, Dist, DistributionMetadata, FileLocation, GitSourceDist, IndexLocations,
PathBuiltDist, PathSourceDist, RegistryBuiltDist, RegistryBuiltWheel, RegistrySourceDist, IndexUrl, Name, PathBuiltDist, PathSourceDist, RegistryBuiltDist, RegistryBuiltWheel,
RemoteSource, ResolvedDist, StaticMetadata, ToUrlError, UrlString, RegistrySourceDist, RemoteSource, Requirement, RequirementSource, ResolvedDist, StaticMetadata,
ToUrlError, UrlString,
}; };
use uv_fs::{relative_to, PortablePath, PortablePathBuf}; use uv_fs::{relative_to, PortablePath, PortablePathBuf};
use uv_git::{RepositoryReference, ResolvedRepositoryReference}; use uv_git::{RepositoryReference, ResolvedRepositoryReference};
@ -40,8 +41,7 @@ use uv_platform_tags::{
AbiTag, IncompatibleTag, LanguageTag, PlatformTag, TagCompatibility, TagPriority, Tags, AbiTag, IncompatibleTag, LanguageTag, PlatformTag, TagCompatibility, TagPriority, Tags,
}; };
use uv_pypi_types::{ use uv_pypi_types::{
redact_credentials, ConflictPackage, Conflicts, HashDigest, HashDigests, ParsedArchiveUrl, ConflictPackage, Conflicts, HashDigest, HashDigests, ParsedArchiveUrl, ParsedGitUrl,
ParsedGitUrl, Requirement, RequirementSource,
}; };
use uv_small_str::SmallString; use uv_small_str::SmallString;
use uv_types::{BuildContext, HashStrategy}; use uv_types::{BuildContext, HashStrategy};

View file

@ -4,8 +4,8 @@ use std::collections::BTreeSet;
use either::Either; use either::Either;
use uv_configuration::{Constraints, Overrides}; use uv_configuration::{Constraints, Overrides};
use uv_distribution_types::Requirement;
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pypi_types::Requirement;
use uv_types::RequestedRequirements; use uv_types::RequestedRequirements;
use crate::preferences::Preferences; use crate::preferences::Preferences;

View file

@ -1,11 +1,10 @@
use uv_pypi_types::RequirementSource; use uv_distribution_types::RequirementSource;
use uv_normalize::PackageName;
use uv_pep440::Operator;
use crate::resolver::ForkSet; use crate::resolver::ForkSet;
use crate::{DependencyMode, Manifest, ResolverEnvironment}; use crate::{DependencyMode, Manifest, ResolverEnvironment};
use uv_normalize::PackageName;
use uv_pep440::Operator;
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(deny_unknown_fields, rename_all = "kebab-case")]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))] #[cfg_attr(feature = "clap", derive(clap::ValueEnum))]

View file

@ -4,11 +4,12 @@ use std::iter;
use either::Either; use either::Either;
use pubgrub::Ranges; use pubgrub::Ranges;
use uv_distribution_types::{Requirement, RequirementSource};
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers}; use uv_pep440::{Version, VersionSpecifiers};
use uv_pypi_types::{ use uv_pypi_types::{
Conflicts, ParsedArchiveUrl, ParsedDirectoryUrl, ParsedGitUrl, ParsedPathUrl, ParsedUrl, Conflicts, ParsedArchiveUrl, ParsedDirectoryUrl, ParsedGitUrl, ParsedPathUrl, ParsedUrl,
Requirement, RequirementSource, VerbatimParsedUrl, VerbatimParsedUrl,
}; };
use crate::pubgrub::{PubGrubPackage, PubGrubPackageInner}; use crate::pubgrub::{PubGrubPackage, PubGrubPackageInner};

View file

@ -12,16 +12,14 @@ use rustc_hash::{FxBuildHasher, FxHashMap, FxHashSet};
use uv_configuration::{Constraints, Overrides}; use uv_configuration::{Constraints, Overrides};
use uv_distribution::Metadata; use uv_distribution::Metadata;
use uv_distribution_types::{ use uv_distribution_types::{
Dist, DistributionMetadata, Edge, IndexUrl, Name, Node, ResolutionDiagnostic, ResolvedDist, Dist, DistributionMetadata, Edge, IndexUrl, Name, Node, Requirement, ResolutionDiagnostic,
VersionId, VersionOrUrlRef, ResolvedDist, VersionId, VersionOrUrlRef,
}; };
use uv_git::GitResolver; use uv_git::GitResolver;
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifier}; use uv_pep440::{Version, VersionSpecifier};
use uv_pep508::{MarkerEnvironment, MarkerTree, MarkerTreeKind}; use uv_pep508::{MarkerEnvironment, MarkerTree, MarkerTreeKind};
use uv_pypi_types::{ use uv_pypi_types::{Conflicts, HashDigests, ParsedUrlError, VerbatimParsedUrl, Yanked};
Conflicts, HashDigests, ParsedUrlError, Requirement, VerbatimParsedUrl, Yanked,
};
use crate::graph_ops::{marker_reachability, simplify_conflict_markers}; use crate::graph_ops::{marker_reachability, simplify_conflict_markers};
use crate::pins::FilePins; use crate::pins::FilePins;

View file

@ -1,6 +1,7 @@
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use uv_distribution_types::Requirement;
use uv_pep508::{MarkerTree, PackageName}; use uv_pep508::{MarkerTree, PackageName};
use uv_pypi_types::Requirement;
use crate::ResolverEnvironment; use crate::ResolverEnvironment;

View file

@ -1,7 +1,7 @@
use uv_distribution_types::IndexUrl; use uv_distribution_types::{IndexUrl, RequirementSource};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep508::VerbatimUrl; use uv_pep508::VerbatimUrl;
use uv_pypi_types::{ConflictItem, RequirementSource}; use uv_pypi_types::ConflictItem;
use crate::resolver::ForkMap; use crate::resolver::ForkMap;
use crate::{DependencyMode, Manifest, ResolverEnvironment}; use crate::{DependencyMode, Manifest, ResolverEnvironment};

View file

@ -25,15 +25,15 @@ use uv_distribution::DistributionDatabase;
use uv_distribution_types::{ use uv_distribution_types::{
BuiltDist, CompatibleDist, DerivationChain, Dist, DistErrorKind, DistributionMetadata, BuiltDist, CompatibleDist, DerivationChain, Dist, DistErrorKind, DistributionMetadata,
IncompatibleDist, IncompatibleSource, IncompatibleWheel, IndexCapabilities, IndexLocations, IncompatibleDist, IncompatibleSource, IncompatibleWheel, IndexCapabilities, IndexLocations,
IndexUrl, InstalledDist, PythonRequirementKind, RemoteSource, ResolvedDist, ResolvedDistRef, IndexUrl, InstalledDist, PythonRequirementKind, RemoteSource, Requirement, ResolvedDist,
SourceDist, VersionOrUrlRef, ResolvedDistRef, SourceDist, VersionOrUrlRef,
}; };
use uv_git::GitResolver; use uv_git::GitResolver;
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{release_specifiers_to_ranges, Version, VersionSpecifiers, MIN_VERSION}; use uv_pep440::{release_specifiers_to_ranges, Version, VersionSpecifiers, MIN_VERSION};
use uv_pep508::{MarkerExpression, MarkerOperator, MarkerTree, MarkerValueString}; use uv_pep508::{MarkerExpression, MarkerOperator, MarkerTree, MarkerValueString};
use uv_platform_tags::Tags; use uv_platform_tags::Tags;
use uv_pypi_types::{ConflictItem, ConflictItemRef, Conflicts, Requirement, VerbatimParsedUrl}; use uv_pypi_types::{ConflictItem, ConflictItemRef, Conflicts, VerbatimParsedUrl};
use uv_types::{BuildContext, HashStrategy, InstalledPackagesProvider}; use uv_types::{BuildContext, HashStrategy, InstalledPackagesProvider};
use uv_warnings::warn_user_once; use uv_warnings::warn_user_once;

View file

@ -2,9 +2,9 @@ use std::sync::Arc;
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use uv_distribution_types::RequirementSource;
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep440::Version; use uv_pep440::Version;
use uv_pypi_types::RequirementSource;
use crate::{DependencyMode, Manifest, ResolverEnvironment}; use crate::{DependencyMode, Manifest, ResolverEnvironment};

View file

@ -18,6 +18,7 @@ workspace = true
[dependencies] [dependencies]
uv-cache = { workspace = true } uv-cache = { workspace = true }
uv-dirs = { workspace = true } uv-dirs = { workspace = true }
uv-distribution-types = { workspace = true }
uv-fs = { workspace = true } uv-fs = { workspace = true }
uv-install-wheel = { workspace = true } uv-install-wheel = { workspace = true }
uv-installer = { workspace = true } uv-installer = { workspace = true }

View file

@ -2,13 +2,11 @@ use std::fmt::{self, Display, Formatter};
use std::path::PathBuf; use std::path::PathBuf;
use serde::Deserialize; use serde::Deserialize;
use toml_edit::value; use toml_edit::{value, Array, Item, Table, Value};
use toml_edit::Table;
use toml_edit::Value;
use toml_edit::{Array, Item};
use uv_distribution_types::Requirement;
use uv_fs::{PortablePath, Simplified}; use uv_fs::{PortablePath, Simplified};
use uv_pypi_types::{Requirement, VerbatimParsedUrl}; use uv_pypi_types::VerbatimParsedUrl;
use uv_settings::ToolOptions; use uv_settings::ToolOptions;
/// A tool entry. /// A tool entry.

View file

@ -6,14 +6,12 @@ use url::Url;
use uv_configuration::HashCheckingMode; use uv_configuration::HashCheckingMode;
use uv_distribution_types::{ use uv_distribution_types::{
DistributionMetadata, HashGeneration, HashPolicy, Name, Resolution, UnresolvedRequirement, DistributionMetadata, HashGeneration, HashPolicy, Name, Requirement, RequirementSource,
VersionId, Resolution, UnresolvedRequirement, VersionId,
}; };
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep440::Version; use uv_pep440::Version;
use uv_pypi_types::{ use uv_pypi_types::{HashDigest, HashDigests, HashError, ResolverMarkerEnvironment};
HashDigest, HashDigests, HashError, Requirement, RequirementSource, ResolverMarkerEnvironment,
};
#[derive(Debug, Default, Clone)] #[derive(Debug, Default, Clone)]
pub enum HashStrategy { pub enum HashStrategy {

View file

@ -1,5 +1,5 @@
use uv_distribution_types::Requirement;
use uv_normalize::ExtraName; use uv_normalize::ExtraName;
use uv_pypi_types::Requirement;
/// A set of requirements as requested by a parent requirement. /// A set of requirements as requested by a parent requirement.
/// ///

View file

@ -11,11 +11,10 @@ use uv_configuration::{BuildKind, BuildOptions, BuildOutput, ConfigSettings, Sou
use uv_distribution_filename::DistFilename; use uv_distribution_filename::DistFilename;
use uv_distribution_types::{ use uv_distribution_types::{
CachedDist, DependencyMetadata, DistributionId, IndexCapabilities, IndexLocations, CachedDist, DependencyMetadata, DistributionId, IndexCapabilities, IndexLocations,
InstalledDist, IsBuildBackendError, Resolution, SourceDist, InstalledDist, IsBuildBackendError, Requirement, Resolution, SourceDist,
}; };
use uv_git::GitResolver; use uv_git::GitResolver;
use uv_pep508::PackageName; use uv_pep508::PackageName;
use uv_pypi_types::Requirement;
use uv_python::{Interpreter, PythonEnvironment}; use uv_python::{Interpreter, PythonEnvironment};
use uv_workspace::WorkspaceCache; use uv_workspace::WorkspaceCache;

View file

@ -19,7 +19,7 @@ use serde::{de::IntoDeserializer, de::SeqAccess, Deserialize, Deserializer, Seri
use thiserror::Error; use thiserror::Error;
use url::Url; use url::Url;
use uv_distribution_types::{Index, IndexName}; use uv_distribution_types::{Index, IndexName, RequirementSource};
use uv_fs::{relative_to, PortablePathBuf}; use uv_fs::{relative_to, PortablePathBuf};
use uv_git_types::GitReference; use uv_git_types::GitReference;
use uv_macros::OptionsMetadata; use uv_macros::OptionsMetadata;
@ -27,8 +27,7 @@ use uv_normalize::{DefaultGroups, ExtraName, GroupName, PackageName};
use uv_pep440::{Version, VersionSpecifiers}; use uv_pep440::{Version, VersionSpecifiers};
use uv_pep508::MarkerTree; use uv_pep508::MarkerTree;
use uv_pypi_types::{ use uv_pypi_types::{
Conflicts, DependencyGroups, RequirementSource, SchemaConflicts, SupportedEnvironments, Conflicts, DependencyGroups, SchemaConflicts, SupportedEnvironments, VerbatimParsedUrl,
VerbatimParsedUrl,
}; };
#[derive(Error, Debug)] #[derive(Error, Debug)]

View file

@ -8,14 +8,12 @@ use glob::{glob, GlobError, PatternError};
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use tracing::{debug, trace, warn}; use tracing::{debug, trace, warn};
use uv_distribution_types::Index; use uv_distribution_types::{Index, Requirement, RequirementSource};
use uv_fs::{Simplified, CWD}; use uv_fs::{Simplified, CWD};
use uv_normalize::{GroupName, PackageName, DEV_DEPENDENCIES}; use uv_normalize::{GroupName, PackageName, DEV_DEPENDENCIES};
use uv_pep440::VersionSpecifiers; use uv_pep440::VersionSpecifiers;
use uv_pep508::{MarkerTree, VerbatimUrl}; use uv_pep508::{MarkerTree, VerbatimUrl};
use uv_pypi_types::{ use uv_pypi_types::{Conflicts, SupportedEnvironments, VerbatimParsedUrl};
Conflicts, Requirement, RequirementSource, SupportedEnvironments, VerbatimParsedUrl,
};
use uv_static::EnvVars; use uv_static::EnvVars;
use uv_warnings::warn_user_once; use uv_warnings::warn_user_once;

View file

@ -20,12 +20,12 @@ use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::{BuildDispatch, SharedState}; use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution_types::{ use uv_distribution_types::{
DependencyMetadata, HashGeneration, Index, IndexLocations, NameRequirementSpecification, DependencyMetadata, HashGeneration, Index, IndexLocations, NameRequirementSpecification,
Origin, UnresolvedRequirementSpecification, Verbatim, Origin, Requirement, UnresolvedRequirementSpecification, Verbatim,
}; };
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_install_wheel::LinkMode; use uv_install_wheel::LinkMode;
use uv_normalize::{GroupName, PackageName}; use uv_normalize::{GroupName, PackageName};
use uv_pypi_types::{Conflicts, Requirement, SupportedEnvironments}; use uv_pypi_types::{Conflicts, SupportedEnvironments};
use uv_python::{ use uv_python::{
EnvironmentPreference, PythonEnvironment, PythonInstallation, PythonPreference, PythonRequest, EnvironmentPreference, PythonEnvironment, PythonInstallation, PythonPreference, PythonRequest,
PythonVersion, VersionRequest, PythonVersion, VersionRequest,

View file

@ -16,15 +16,15 @@ use uv_configuration::{
use uv_configuration::{KeyringProviderType, TargetTriple}; use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::{BuildDispatch, SharedState}; use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution_types::{ use uv_distribution_types::{
DependencyMetadata, Index, IndexLocations, NameRequirementSpecification, Origin, Resolution, DependencyMetadata, Index, IndexLocations, NameRequirementSpecification, Origin, Requirement,
UnresolvedRequirementSpecification, Resolution, UnresolvedRequirementSpecification,
}; };
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_install_wheel::LinkMode; use uv_install_wheel::LinkMode;
use uv_installer::{SatisfiesResult, SitePackages}; use uv_installer::{SatisfiesResult, SitePackages};
use uv_normalize::GroupName; use uv_normalize::GroupName;
use uv_pep508::PackageName; use uv_pep508::PackageName;
use uv_pypi_types::{Conflicts, Requirement}; use uv_pypi_types::Conflicts;
use uv_python::{ use uv_python::{
EnvironmentPreference, Prefix, PythonEnvironment, PythonInstallation, PythonPreference, EnvironmentPreference, Prefix, PythonEnvironment, PythonInstallation, PythonPreference,
PythonRequest, PythonVersion, Target, PythonRequest, PythonVersion, Target,

View file

@ -8,10 +8,10 @@ use tracing::debug;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_configuration::{DryRun, KeyringProviderType}; use uv_configuration::{DryRun, KeyringProviderType};
use uv_distribution_types::Requirement;
use uv_distribution_types::{InstalledMetadata, Name, UnresolvedRequirement}; use uv_distribution_types::{InstalledMetadata, Name, UnresolvedRequirement};
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_pep508::UnnamedRequirement; use uv_pep508::UnnamedRequirement;
use uv_pypi_types::Requirement;
use uv_pypi_types::VerbatimParsedUrl; use uv_pypi_types::VerbatimParsedUrl;
use uv_python::EnvironmentPreference; use uv_python::EnvironmentPreference;
use uv_python::PythonRequest; use uv_python::PythonRequest;

View file

@ -23,14 +23,15 @@ use uv_configuration::{
use uv_dispatch::BuildDispatch; use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase; use uv_distribution::DistributionDatabase;
use uv_distribution_types::{ use uv_distribution_types::{
Index, IndexName, IndexUrls, NameRequirementSpecification, UnresolvedRequirement, VersionId, redact_credentials, Index, IndexName, IndexUrls, NameRequirementSpecification, Requirement,
RequirementSource, UnresolvedRequirement, VersionId,
}; };
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_git::GIT_STORE; use uv_git::GIT_STORE;
use uv_git_types::GitReference; use uv_git_types::GitReference;
use uv_normalize::{DefaultGroups, PackageName, DEV_DEPENDENCIES}; use uv_normalize::{DefaultGroups, PackageName, DEV_DEPENDENCIES};
use uv_pep508::{ExtraName, MarkerTree, Requirement, UnnamedRequirement, VersionOrUrl}; use uv_pep508::{ExtraName, MarkerTree, UnnamedRequirement, VersionOrUrl};
use uv_pypi_types::{redact_credentials, ParsedUrl, RequirementSource, VerbatimParsedUrl}; use uv_pypi_types::{ParsedUrl, VerbatimParsedUrl};
use uv_python::{Interpreter, PythonDownloads, PythonEnvironment, PythonPreference, PythonRequest}; use uv_python::{Interpreter, PythonDownloads, PythonEnvironment, PythonPreference, PythonRequest};
use uv_requirements::{NamedRequirementsResolver, RequirementsSource, RequirementsSpecification}; use uv_requirements::{NamedRequirementsResolver, RequirementsSource, RequirementsSpecification};
use uv_resolver::FlatIndex; use uv_resolver::FlatIndex;
@ -928,7 +929,7 @@ fn augment_requirement(
) -> UnresolvedRequirement { ) -> UnresolvedRequirement {
match requirement { match requirement {
UnresolvedRequirement::Named(mut requirement) => { UnresolvedRequirement::Named(mut requirement) => {
UnresolvedRequirement::Named(uv_pypi_types::Requirement { UnresolvedRequirement::Named(Requirement {
marker: marker marker: marker
.map(|marker| { .map(|marker| {
requirement.marker.and(marker); requirement.marker.and(marker);
@ -996,7 +997,7 @@ fn augment_requirement(
/// Resolves the source for a requirement and processes it into a PEP 508 compliant format. /// Resolves the source for a requirement and processes it into a PEP 508 compliant format.
fn resolve_requirement( fn resolve_requirement(
requirement: uv_pypi_types::Requirement, requirement: Requirement,
workspace: bool, workspace: bool,
editable: Option<bool>, editable: Option<bool>,
index: Option<IndexName>, index: Option<IndexName>,
@ -1004,7 +1005,7 @@ fn resolve_requirement(
tag: Option<String>, tag: Option<String>,
branch: Option<String>, branch: Option<String>,
root: &Path, root: &Path,
) -> Result<(Requirement, Option<Source>), anyhow::Error> { ) -> Result<(uv_pep508::Requirement, Option<Source>), anyhow::Error> {
let result = Source::from_requirement( let result = Source::from_requirement(
&requirement.name, &requirement.name,
requirement.source.clone(), requirement.source.clone(),
@ -1197,7 +1198,7 @@ impl AddTargetSnapshot {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct DependencyEdit { struct DependencyEdit {
dependency_type: DependencyType, dependency_type: DependencyType,
requirement: Requirement, requirement: uv_pep508::Requirement,
source: Option<Source>, source: Option<Source>,
edit: ArrayEdit, edit: ArrayEdit,
} }

View file

@ -19,12 +19,12 @@ use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase; use uv_distribution::DistributionDatabase;
use uv_distribution_types::{ use uv_distribution_types::{
DependencyMetadata, HashGeneration, Index, IndexLocations, NameRequirementSpecification, DependencyMetadata, HashGeneration, Index, IndexLocations, NameRequirementSpecification,
UnresolvedRequirementSpecification, Requirement, UnresolvedRequirementSpecification,
}; };
use uv_git::ResolvedRepositoryReference; use uv_git::ResolvedRepositoryReference;
use uv_normalize::{GroupName, PackageName}; use uv_normalize::{GroupName, PackageName};
use uv_pep440::Version; use uv_pep440::Version;
use uv_pypi_types::{Conflicts, Requirement, SupportedEnvironments}; use uv_pypi_types::{Conflicts, SupportedEnvironments};
use uv_python::{Interpreter, PythonDownloads, PythonEnvironment, PythonPreference, PythonRequest}; use uv_python::{Interpreter, PythonDownloads, PythonEnvironment, PythonPreference, PythonRequest};
use uv_requirements::upgrade::{read_lock_requirements, LockedRequirements}; use uv_requirements::upgrade::{read_lock_requirements, LockedRequirements};
use uv_requirements::ExtrasResolver; use uv_requirements::ExtrasResolver;

View file

@ -5,10 +5,10 @@ use itertools::Either;
use uv_configuration::SourceStrategy; use uv_configuration::SourceStrategy;
use uv_distribution::LoweredRequirement; use uv_distribution::LoweredRequirement;
use uv_distribution_types::{Index, IndexLocations}; use uv_distribution_types::{Index, IndexLocations, Requirement};
use uv_normalize::{GroupName, PackageName}; use uv_normalize::{GroupName, PackageName};
use uv_pep508::RequirementOrigin; use uv_pep508::RequirementOrigin;
use uv_pypi_types::{Conflicts, Requirement, SupportedEnvironments, VerbatimParsedUrl}; use uv_pypi_types::{Conflicts, SupportedEnvironments, VerbatimParsedUrl};
use uv_resolver::{Lock, LockVersion, RequiresPython, VERSION}; use uv_resolver::{Lock, LockVersion, RequiresPython, VERSION};
use uv_scripts::Pep723Script; use uv_scripts::Pep723Script;
use uv_workspace::dependency_groups::DependencyGroupError; use uv_workspace::dependency_groups::DependencyGroupError;

View file

@ -19,7 +19,7 @@ use uv_configuration::{
use uv_dispatch::{BuildDispatch, SharedState}; use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution::{DistributionDatabase, LoweredRequirement}; use uv_distribution::{DistributionDatabase, LoweredRequirement};
use uv_distribution_types::{ use uv_distribution_types::{
Index, Resolution, UnresolvedRequirement, UnresolvedRequirementSpecification, Index, Requirement, Resolution, UnresolvedRequirement, UnresolvedRequirementSpecification,
}; };
use uv_fs::{LockedFile, Simplified, CWD}; use uv_fs::{LockedFile, Simplified, CWD};
use uv_git::ResolvedRepositoryReference; use uv_git::ResolvedRepositoryReference;
@ -27,7 +27,7 @@ use uv_installer::{SatisfiesResult, SitePackages};
use uv_normalize::{DefaultGroups, ExtraName, GroupName, PackageName, DEV_DEPENDENCIES}; use uv_normalize::{DefaultGroups, ExtraName, GroupName, PackageName, DEV_DEPENDENCIES};
use uv_pep440::{Version, VersionSpecifiers}; use uv_pep440::{Version, VersionSpecifiers};
use uv_pep508::MarkerTreeContents; use uv_pep508::MarkerTreeContents;
use uv_pypi_types::{ConflictPackage, ConflictSet, Conflicts, Requirement}; use uv_pypi_types::{ConflictPackage, ConflictSet, Conflicts};
use uv_python::{ use uv_python::{
EnvironmentPreference, Interpreter, InvalidEnvironmentKind, PythonDownloads, PythonEnvironment, EnvironmentPreference, Interpreter, InvalidEnvironmentKind, PythonDownloads, PythonEnvironment,
PythonInstallation, PythonPreference, PythonRequest, PythonVariant, PythonVersionFile, PythonInstallation, PythonPreference, PythonRequest, PythonVariant, PythonVersionFile,

View file

@ -7,6 +7,7 @@ use std::{collections::BTreeSet, ffi::OsString};
use tracing::{debug, warn}; use tracing::{debug, warn};
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_distribution_types::Requirement;
use uv_distribution_types::{InstalledDist, Name}; use uv_distribution_types::{InstalledDist, Name};
#[cfg(unix)] #[cfg(unix)]
use uv_fs::replace_symlink; use uv_fs::replace_symlink;
@ -14,7 +15,6 @@ use uv_fs::Simplified;
use uv_installer::SitePackages; use uv_installer::SitePackages;
use uv_pep440::{Version, VersionSpecifier, VersionSpecifiers}; use uv_pep440::{Version, VersionSpecifier, VersionSpecifiers};
use uv_pep508::PackageName; use uv_pep508::PackageName;
use uv_pypi_types::Requirement;
use uv_python::{ use uv_python::{
EnvironmentPreference, Interpreter, PythonDownloads, PythonEnvironment, PythonInstallation, EnvironmentPreference, Interpreter, PythonDownloads, PythonEnvironment, PythonInstallation,
PythonPreference, PythonRequest, PythonVariant, VersionRequest, PythonPreference, PythonRequest, PythonVariant, VersionRequest,

View file

@ -10,11 +10,13 @@ use uv_cache::{Cache, Refresh};
use uv_cache_info::Timestamp; use uv_cache_info::Timestamp;
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_configuration::{Concurrency, DryRun, PreviewMode, Reinstall, Upgrade}; use uv_configuration::{Concurrency, DryRun, PreviewMode, Reinstall, Upgrade};
use uv_distribution_types::{NameRequirementSpecification, UnresolvedRequirementSpecification}; use uv_distribution_types::{
NameRequirementSpecification, Requirement, RequirementSource,
UnresolvedRequirementSpecification,
};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep440::{VersionSpecifier, VersionSpecifiers}; use uv_pep440::{VersionSpecifier, VersionSpecifiers};
use uv_pep508::MarkerTree; use uv_pep508::MarkerTree;
use uv_pypi_types::{Requirement, RequirementSource};
use uv_python::{ use uv_python::{
EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest, EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest,
}; };

View file

@ -19,15 +19,14 @@ use uv_cli::ExternalCommand;
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_configuration::{Concurrency, PreviewMode}; use uv_configuration::{Concurrency, PreviewMode};
use uv_distribution_types::{ use uv_distribution_types::{
IndexUrl, Name, NameRequirementSpecification, UnresolvedRequirement, IndexUrl, Name, NameRequirementSpecification, Requirement, RequirementSource,
UnresolvedRequirementSpecification, UnresolvedRequirement, UnresolvedRequirementSpecification,
}; };
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_installer::{SatisfiesResult, SitePackages}; use uv_installer::{SatisfiesResult, SitePackages};
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pep440::{VersionSpecifier, VersionSpecifiers}; use uv_pep440::{VersionSpecifier, VersionSpecifiers};
use uv_pep508::MarkerTree; use uv_pep508::MarkerTree;
use uv_pypi_types::{Requirement, RequirementSource};
use uv_python::VersionRequest; use uv_python::VersionRequest;
use uv_python::{ use uv_python::{
EnvironmentPreference, PythonDownloads, PythonEnvironment, PythonInstallation, EnvironmentPreference, PythonDownloads, PythonEnvironment, PythonInstallation,

View file

@ -8,9 +8,9 @@ use tracing::debug;
use uv_cache::Cache; use uv_cache::Cache;
use uv_client::BaseClientBuilder; use uv_client::BaseClientBuilder;
use uv_configuration::{Concurrency, DryRun, PreviewMode}; use uv_configuration::{Concurrency, DryRun, PreviewMode};
use uv_distribution_types::Requirement;
use uv_fs::CWD; use uv_fs::CWD;
use uv_normalize::PackageName; use uv_normalize::PackageName;
use uv_pypi_types::Requirement;
use uv_python::{ use uv_python::{
EnvironmentPreference, Interpreter, PythonDownloads, PythonInstallation, PythonPreference, EnvironmentPreference, Interpreter, PythonDownloads, PythonInstallation, PythonPreference,
PythonRequest, PythonRequest,

View file

@ -17,10 +17,10 @@ use uv_configuration::{
NoBinary, NoBuild, PreviewMode, SourceStrategy, NoBinary, NoBuild, PreviewMode, SourceStrategy,
}; };
use uv_dispatch::{BuildDispatch, SharedState}; use uv_dispatch::{BuildDispatch, SharedState};
use uv_distribution_types::Requirement;
use uv_distribution_types::{DependencyMetadata, Index, IndexLocations}; use uv_distribution_types::{DependencyMetadata, Index, IndexLocations};
use uv_fs::Simplified; use uv_fs::Simplified;
use uv_install_wheel::LinkMode; use uv_install_wheel::LinkMode;
use uv_pypi_types::Requirement;
use uv_python::{ use uv_python::{
EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest, EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest,
}; };

View file

@ -28,11 +28,11 @@ use uv_configuration::{
RequiredVersion, SourceStrategy, TargetTriple, TrustedHost, TrustedPublishing, Upgrade, RequiredVersion, SourceStrategy, TargetTriple, TrustedHost, TrustedPublishing, Upgrade,
VersionControlSystem, VersionControlSystem,
}; };
use uv_distribution_types::{DependencyMetadata, Index, IndexLocations, IndexUrl}; use uv_distribution_types::{DependencyMetadata, Index, IndexLocations, IndexUrl, Requirement};
use uv_install_wheel::LinkMode; use uv_install_wheel::LinkMode;
use uv_normalize::{PackageName, PipGroupName}; use uv_normalize::{PackageName, PipGroupName};
use uv_pep508::{ExtraName, MarkerTree, RequirementOrigin}; use uv_pep508::{ExtraName, MarkerTree, RequirementOrigin};
use uv_pypi_types::{Requirement, SupportedEnvironments}; use uv_pypi_types::SupportedEnvironments;
use uv_python::{Prefix, PythonDownloads, PythonPreference, PythonVersion, Target}; use uv_python::{Prefix, PythonDownloads, PythonPreference, PythonVersion, Target};
use uv_resolver::{ use uv_resolver::{
AnnotationStyle, DependencyMode, ExcludeNewer, ForkStrategy, PrereleaseMode, ResolutionMode, AnnotationStyle, DependencyMode, ExcludeNewer, ForkStrategy, PrereleaseMode, ResolutionMode,