Skip to content

Commit b1cb671

Browse files
committed
fix(package-config): a requirement updates every same-identity row on its condition
Rows aliased onto one provider all carry the requirement's pin, a virtual row is skipped, and an existing provider alias is kept. Ported from develop.
1 parent dd11cde commit b1cb671

1 file changed

Lines changed: 23 additions & 7 deletions

File tree

‎src/package_config.rs‎

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -585,13 +585,27 @@ fn ensure_dependency_requirement(
585585
) {
586586
let condition = requirement_condition(&requirement.features);
587587
let identity = package_identity(&requirement.name);
588-
let existing = plan.dependencies.iter_mut().find(|dependency| {
588+
let mut found = false;
589+
for dependency in &mut plan.dependencies {
589590
let effective_name = dependency.eb_name.as_deref().unwrap_or(&dependency.name);
590-
package_identity(effective_name) == identity
591-
&& (condition == ConditionExpr::Always || dependency.condition == condition)
592-
});
593-
if let Some(dependency) = existing {
594-
dependency.eb_name = Some(requirement.name.clone());
591+
if package_identity(effective_name) != identity
592+
|| !(condition == ConditionExpr::Always || dependency.condition == condition)
593+
{
594+
continue;
595+
}
596+
// A virtual fftw row is not EasyBuild FFTW. Matching it would mark
597+
// found and leave virtual_capability set, so SAT never sees FFTW.
598+
if dependency.virtual_capability.is_some() {
599+
continue;
600+
}
601+
found = true;
602+
if dependency
603+
.eb_name
604+
.as_deref()
605+
.is_none_or(|name| name.is_empty())
606+
{
607+
dependency.eb_name = Some(requirement.name.clone());
608+
}
595609
if let Some(constraint) = &requirement.constraint {
596610
dependency.constraint = Some(constraint.clone());
597611
}
@@ -611,8 +625,10 @@ fn ensure_dependency_requirement(
611625
}
612626
}
613627
}
614-
dependency.condition = condition;
628+
dependency.condition = condition.clone();
615629
dependency.solver_excluded = false;
630+
}
631+
if found {
616632
return;
617633
}
618634

0 commit comments

Comments
 (0)