Skip to content

Commit f1bdf7e

Browse files
committed
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.
1 parent ab7daeb commit f1bdf7e

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

crates/uv-resolver/src/lock/installable.rs

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::borrow::Cow;
12
use std::collections::hash_map::Entry;
23
use std::collections::VecDeque;
34
use std::path::Path;
@@ -277,6 +278,14 @@ pub trait Installable<'lock> {
277278
Either::Right(package.dependencies.iter())
278279
};
279280
for dep in deps {
281+
let mut activated_extras = Cow::Borrowed(&*activated_extras);
282+
if !dep.extra.is_empty() {
283+
let mut extended = activated_extras.to_vec();
284+
for extra in &dep.extra {
285+
extended.push((&dep.package_id.name, extra));
286+
}
287+
activated_extras = Cow::Owned(extended);
288+
}
280289
if !dep.complexified_marker.evaluate(
281290
marker_env,
282291
&activated_extras,

crates/uv/tests/it/lock_conflict.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -1191,7 +1191,11 @@ fn extra_unconditional_non_conflicting() -> Result<()> {
11911191
----- stdout -----
11921192
11931193
----- stderr -----
1194-
Audited in [TIME]
1194+
Prepared 3 packages in [TIME]
1195+
Installed 3 packages in [TIME]
1196+
+ anyio==4.1.0
1197+
+ idna==3.6
1198+
+ sniffio==1.3.1
11951199
"###);
11961200

11971201
Ok(())

0 commit comments

Comments
 (0)