uv-resolver: fix propagation of extras

This will make `package[extra]` work even when `extra` is declared as a
conflicting extra.

Note that this isn't relevant for dependency groups since AFAIK those
can actually only be enabled on the CLI. There is no `package:group`
dependency syntax.
This commit is contained in:
Andrew Gallant 2025-01-22 14:07:34 -05:00 committed by Andrew Gallant
parent 18fa48a092
commit 1676e63603
2 changed files with 14 additions and 1 deletions

View File

@ -1,3 +1,4 @@
use std::borrow::Cow;
use std::collections::hash_map::Entry; use std::collections::hash_map::Entry;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::path::Path; use std::path::Path;
@ -277,6 +278,14 @@ pub trait Installable<'lock> {
Either::Right(package.dependencies.iter()) Either::Right(package.dependencies.iter())
}; };
for dep in deps { for dep in deps {
let mut activated_extras = Cow::Borrowed(&*activated_extras);
if !dep.extra.is_empty() {
let mut extended = activated_extras.to_vec();
for extra in &dep.extra {
extended.push((&dep.package_id.name, extra));
}
activated_extras = Cow::Owned(extended);
}
if !dep.complexified_marker.evaluate( if !dep.complexified_marker.evaluate(
marker_env, marker_env,
&activated_extras, &activated_extras,

View File

@ -1191,7 +1191,11 @@ fn extra_unconditional_non_conflicting() -> Result<()> {
----- stdout ----- ----- stdout -----
----- stderr ----- ----- stderr -----
Audited in [TIME] Prepared 3 packages in [TIME]
Installed 3 packages in [TIME]
+ anyio==4.1.0
+ idna==3.6
+ sniffio==1.3.1
"###); "###);
Ok(()) Ok(())