From eaeaf4251f721e0f647975a507da1e77ac2cfe11 Mon Sep 17 00:00:00 2001
From: prsabahrami
Date: Fri, 24 Jan 2025 12:00:09 -0500
Subject: [PATCH] implement conditions in `from_provider_async` function
---
src/snapshot.rs | 8 +++++++-
src/solver/mod.rs | 4 ++--
tests/solver.rs | 10 ++++------
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/snapshot.rs b/src/snapshot.rs
index aa8e967..ab6d926 100644
--- a/src/snapshot.rs
+++ b/src/snapshot.rs
@@ -221,7 +221,13 @@ impl DependencySnapshot {
}
for &req in deps.requirements.iter() {
- let (_, requirement) = req.into_condition_and_requirement(); // TODO: condition
+ let (condition, requirement) = req.into_condition_and_requirement();
+
+ if let Some(condition) = condition {
+ if seen.insert(Element::VersionSet(condition)) {
+ queue.push_back(Element::VersionSet(condition));
+ }
+ }
match requirement {
Requirement::Single(version_set) => {
diff --git a/src/solver/mod.rs b/src/solver/mod.rs
index 87193ec..ebb57ac 100644
--- a/src/solver/mod.rs
+++ b/src/solver/mod.rs
@@ -1926,12 +1926,12 @@ async fn add_clauses_for_solvables(
);
}
-
if let Some((condition, condition_candidates)) = condition {
tracing::trace!(
"Adding conditional clauses for {} with condition {}",
requirement.display(cache.provider()),
- std::convert::Into::::into(condition).display(cache.provider()),
+ std::convert::Into::::into(condition)
+ .display(cache.provider()),
);
let condition_version_set_variables = requirement_to_sorted_candidates.insert(
diff --git a/tests/solver.rs b/tests/solver.rs
index 77e1488..b19d5ca 100644
--- a/tests/solver.rs
+++ b/tests/solver.rs
@@ -514,12 +514,10 @@ impl DependencyProvider for BundleBoxProvider {
.into()
};
- result
- .requirements
- .push(ConditionalRequirement {
- requirement,
- condition: None,
- });
+ result.requirements.push(ConditionalRequirement {
+ requirement,
+ condition: None,
+ });
}
for req in &deps.constrains {