Allow direct URLs in optional dependencies in editables (#2206)
See the additional test, which fails on `main`.
This commit is contained in:
@@ -42,21 +42,21 @@ impl Urls {
|
||||
}
|
||||
|
||||
// Add any editable requirements. If there are any conflicts, return an error.
|
||||
for (requirement, metadata) in &manifest.editables {
|
||||
if let Some(previous) = urls.insert(metadata.name.clone(), requirement.url.clone()) {
|
||||
for (editable, metadata) in &manifest.editables {
|
||||
if let Some(previous) = urls.insert(metadata.name.clone(), editable.url.clone()) {
|
||||
if cache_key::CanonicalUrl::new(previous.raw())
|
||||
!= cache_key::CanonicalUrl::new(requirement.raw())
|
||||
!= cache_key::CanonicalUrl::new(editable.raw())
|
||||
{
|
||||
return Err(ResolveError::ConflictingUrlsDirect(
|
||||
metadata.name.clone(),
|
||||
previous.verbatim().to_string(),
|
||||
requirement.verbatim().to_string(),
|
||||
editable.verbatim().to_string(),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
for requirement in &metadata.requires_dist {
|
||||
if !requirement.evaluate_markers(markers, &[]) {
|
||||
if !requirement.evaluate_markers(markers, &editable.extras) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -4756,3 +4756,51 @@ requires-python = "<=3.8"
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn editable_optional_url() -> Result<()> {
|
||||
let context = TestContext::new("3.12");
|
||||
|
||||
// Create an editable package with an optional URL dependency.
|
||||
let pyproject_toml = context.temp_dir.child("pyproject.toml");
|
||||
pyproject_toml.write_str(
|
||||
r#"[project]
|
||||
name = "example"
|
||||
version = "0.0.0"
|
||||
dependencies = []
|
||||
requires-python = '>=3.8'
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"anyio @ https://files.pythonhosted.org/packages/bf/cd/d6d9bb1dadf73e7af02d18225cbd2c93f8552e13130484f1c8dcfece292b/anyio-4.2.0-py3-none-any.whl"
|
||||
]
|
||||
"#,
|
||||
)?;
|
||||
|
||||
// Write to a requirements file.
|
||||
let requirements_in = context.temp_dir.child("requirements.in");
|
||||
requirements_in.write_str("-e .[dev]")?;
|
||||
|
||||
uv_snapshot!(context.compile()
|
||||
.arg("requirements.in"), @r###"
|
||||
success: true
|
||||
exit_code: 0
|
||||
----- stdout -----
|
||||
# This file was autogenerated by uv via the following command:
|
||||
# uv pip compile --cache-dir [CACHE_DIR] --exclude-newer 2023-11-18T12:00:00Z requirements.in
|
||||
-e .
|
||||
anyio @ https://files.pythonhosted.org/packages/bf/cd/d6d9bb1dadf73e7af02d18225cbd2c93f8552e13130484f1c8dcfece292b/anyio-4.2.0-py3-none-any.whl
|
||||
# via example
|
||||
idna==3.4
|
||||
# via anyio
|
||||
sniffio==1.3.0
|
||||
# via anyio
|
||||
|
||||
----- stderr -----
|
||||
Built 1 editable in [TIME]
|
||||
Resolved 4 packages in [TIME]
|
||||
"###
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user