mirror of
https://github.com/astral-sh/uv.git
synced 2025-10-01 14:31:12 +00:00
Remove unconstrained version error from requirements (#3443)
## Summary It's not clear to me that this should exist at all, but it's causing errors in projects that don't use `tool.uv.sources`, so we should definitely remove it for now.
This commit is contained in:
parent
c59cb1381a
commit
49937a386d
1 changed files with 7 additions and 32 deletions
|
@ -20,6 +20,7 @@ use thiserror::Error;
|
|||
use url::Url;
|
||||
|
||||
use distribution_types::{ParsedUrlError, Requirement, RequirementSource, Requirements};
|
||||
use pep440_rs::VersionSpecifiers;
|
||||
use pep508_rs::{VerbatimUrl, VersionOrUrl};
|
||||
use uv_configuration::PreviewMode;
|
||||
use uv_fs::Simplified;
|
||||
|
@ -50,8 +51,6 @@ pub enum LoweringError {
|
|||
PathToUrl(PathBuf),
|
||||
#[error("Package is not included as workspace package in `tool.uv.workspace`")]
|
||||
UndeclaredWorkspacePackage,
|
||||
#[error("Must specify a version constraint")]
|
||||
UnconstrainedVersion,
|
||||
#[error("Can only specify one of rev, tag, or branch")]
|
||||
MoreThanOneGitRef,
|
||||
#[error("Unable to combine options in `tool.uv.sources`")]
|
||||
|
@ -283,7 +282,6 @@ impl Pep621Metadata {
|
|||
let requirements = lower_requirements(
|
||||
&project.dependencies.unwrap_or_default(),
|
||||
&project.optional_dependencies.unwrap_or_default(),
|
||||
&project.name,
|
||||
project_dir,
|
||||
&project_sources.unwrap_or_default(),
|
||||
workspace_sources,
|
||||
|
@ -322,7 +320,6 @@ impl Pep621Metadata {
|
|||
pub(crate) fn lower_requirements(
|
||||
dependencies: &[String],
|
||||
optional_dependencies: &IndexMap<ExtraName, Vec<String>>,
|
||||
project_name: &PackageName,
|
||||
project_dir: &Path,
|
||||
project_sources: &HashMap<PackageName, Source>,
|
||||
workspace_sources: &HashMap<PackageName, Source>,
|
||||
|
@ -336,7 +333,6 @@ pub(crate) fn lower_requirements(
|
|||
let name = requirement.name.clone();
|
||||
lower_requirement(
|
||||
requirement,
|
||||
project_name,
|
||||
project_dir,
|
||||
project_sources,
|
||||
workspace_sources,
|
||||
|
@ -356,7 +352,6 @@ pub(crate) fn lower_requirements(
|
|||
let name = requirement.name.clone();
|
||||
lower_requirement(
|
||||
requirement,
|
||||
project_name,
|
||||
project_dir,
|
||||
project_sources,
|
||||
workspace_sources,
|
||||
|
@ -378,7 +373,6 @@ pub(crate) fn lower_requirements(
|
|||
/// Combine `project.dependencies` or `project.optional-dependencies` with `tool.uv.sources`.
|
||||
pub(crate) fn lower_requirement(
|
||||
requirement: pep508_rs::Requirement,
|
||||
project_name: &PackageName,
|
||||
project_dir: &Path,
|
||||
project_sources: &HashMap<PackageName, Source>,
|
||||
workspace_sources: &HashMap<PackageName, Source>,
|
||||
|
@ -389,6 +383,7 @@ pub(crate) fn lower_requirement(
|
|||
.get(&requirement.name)
|
||||
.or(workspace_sources.get(&requirement.name))
|
||||
.cloned();
|
||||
|
||||
if !matches!(
|
||||
source,
|
||||
Some(Source::Workspace {
|
||||
|
@ -403,12 +398,7 @@ pub(crate) fn lower_requirement(
|
|||
|
||||
let Some(source) = source else {
|
||||
// Support recursive editable inclusions.
|
||||
// TODO(konsti): This is a workspace feature.
|
||||
return if requirement.version_or_url.is_none() && &requirement.name != project_name {
|
||||
Err(LoweringError::UnconstrainedVersion)
|
||||
} else {
|
||||
Ok(Requirement::from_pep508(requirement)?)
|
||||
};
|
||||
return Ok(Requirement::from_pep508(requirement)?);
|
||||
};
|
||||
|
||||
if preview.is_disabled() {
|
||||
|
@ -488,7 +478,10 @@ pub(crate) fn lower_requirement(
|
|||
path_source(path, project_dir, editable)?
|
||||
}
|
||||
Source::Registry { index } => match requirement.version_or_url {
|
||||
None => return Err(LoweringError::UnconstrainedVersion),
|
||||
None => RequirementSource::Registry {
|
||||
specifier: VersionSpecifiers::empty(),
|
||||
index: Some(index),
|
||||
},
|
||||
Some(VersionOrUrl::VersionSpecifier(version)) => RequirementSource::Registry {
|
||||
specifier: version,
|
||||
index: Some(index),
|
||||
|
@ -765,24 +758,6 @@ mod test {
|
|||
"###);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn missing_constraint() {
|
||||
let input = indoc! {r#"
|
||||
[project]
|
||||
name = "foo"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"tqdm",
|
||||
]
|
||||
"#};
|
||||
|
||||
assert_snapshot!(format_err(input), @r###"
|
||||
error: Failed to parse `pyproject.toml`
|
||||
Caused by: Failed to parse entry for: `tqdm`
|
||||
Caused by: Must specify a version constraint
|
||||
"###);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn invalid_syntax() {
|
||||
let input = indoc! {r#"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue