Skip to content

Commit 03255d3

Browse files
authored
fix: an issue with source-interdependencies and dev packages (#5292)
1 parent b007a3f commit 03255d3

File tree

1 file changed

+24
-10
lines changed
  • crates/pixi_core/src/lock_file/satisfiability

1 file changed

+24
-10
lines changed

crates/pixi_core/src/lock_file/satisfiability/mod.rs

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,6 +1454,12 @@ pub async fn resolve_dev_dependencies(
14541454
variants: &std::collections::BTreeMap<String, Vec<VariantValue>>,
14551455
variant_files: &[PathBuf],
14561456
) -> Result<Vec<Dependency>, Box<PlatformUnsat>> {
1457+
// Collect all dev source package names to filter out interdependencies
1458+
let dev_source_names: HashSet<PackageName> = dev_dependencies
1459+
.iter()
1460+
.map(|(name, _)| name.clone())
1461+
.collect();
1462+
14571463
let futures = dev_dependencies
14581464
.into_iter()
14591465
.map(|(package_name, source_spec)| {
@@ -1463,6 +1469,7 @@ pub async fn resolve_dev_dependencies(
14631469
let build_environment = build_environment.clone();
14641470
let variants = variants.clone();
14651471
let variant_files = variant_files.to_vec();
1472+
let dev_source_names = dev_source_names.clone();
14661473

14671474
resolve_single_dev_dependency(
14681475
package_name,
@@ -1473,6 +1480,7 @@ pub async fn resolve_dev_dependencies(
14731480
build_environment,
14741481
variants,
14751482
variant_files,
1483+
dev_source_names,
14761484
)
14771485
})
14781486
.collect::<futures::stream::FuturesUnordered<_>>();
@@ -1498,6 +1506,7 @@ async fn resolve_single_dev_dependency(
14981506
build_environment: BuildEnvironment,
14991507
variants: std::collections::BTreeMap<String, Vec<VariantValue>>,
15001508
variant_files: Vec<PathBuf>,
1509+
dev_source_names: HashSet<PackageName>,
15011510
) -> Result<Vec<Dependency>, PlatformUnsat> {
15021511
let pinned_source = command_dispatcher
15031512
.pin_and_checkout(source_spec.location)
@@ -1527,20 +1536,25 @@ async fn resolve_single_dev_dependency(
15271536

15281537
let mut dependencies = Vec::new();
15291538

1530-
// Process source dependencies
1531-
for (dev_name, dep) in dev_source.into_specs() {
1532-
let string = dep.to_string();
1539+
// Process source dependencies, filtering out dependencies that are also dev sources
1540+
for (dep_name, dep) in dev_source
1541+
.into_specs()
1542+
.filter(|(name, _)| !dev_source_names.contains(name))
1543+
{
15331544
let anchored_source = dep.resolve(&SourceAnchor::Workspace);
15341545

15351546
dependencies.push(Dependency::CondaSource(
1536-
dev_name.clone(),
1547+
dep_name.clone(),
15371548
anchored_source,
1538-
Cow::Owned(format!("{} @ {}", dev_name.as_source(), string)),
1549+
Cow::Owned(package_name.as_source().to_string()),
15391550
));
15401551
}
15411552

1542-
// Process binary dependencies
1543-
for (dev_name, binary_spec) in dev_bin.into_specs() {
1553+
// Process binary dependencies, filtering out dependencies that are also dev sources
1554+
for (dep_name, binary_spec) in dev_bin
1555+
.into_specs()
1556+
.filter(|(name, _)| !dev_source_names.contains(name))
1557+
{
15441558
// Convert BinarySpec to NamelessMatchSpec
15451559
let nameless_spec = binary_spec
15461560
.try_into_nameless_match_spec(&channel_config)
@@ -1557,16 +1571,16 @@ async fn resolve_single_dev_dependency(
15571571
SpecConversionError::MissingName => ParseMatchSpecError::MissingPackageName,
15581572
};
15591573
PlatformUnsat::FailedToParseMatchSpec(
1560-
dev_name.as_source().to_string(),
1574+
dep_name.as_source().to_string(),
15611575
parse_channel_err,
15621576
)
15631577
})?;
15641578

1565-
let spec = MatchSpec::from_nameless(nameless_spec, Some(dev_name.clone().into()));
1579+
let spec = MatchSpec::from_nameless(nameless_spec, Some(dep_name.clone().into()));
15661580

15671581
dependencies.push(Dependency::Conda(
15681582
spec,
1569-
Cow::Owned(dev_name.as_source().to_string()),
1583+
Cow::Owned(package_name.as_source().to_string()),
15701584
));
15711585
}
15721586

0 commit comments

Comments
 (0)