Skip to content

Commit

Permalink
fix tests and added tracing to conditional operations
Browse files Browse the repository at this point in the history
  • Loading branch information
prsabahrami committed Jan 24, 2025
1 parent a13facf commit 286801b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 36 deletions.
25 changes: 21 additions & 4 deletions src/solver/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1706,10 +1706,20 @@ async fn add_clauses_for_solvables<D: DependencyProvider>(
{
let dependency_name = cache.provider().version_set_name(version_set_id);
if clauses_added_for_package.insert(dependency_name) {
tracing::trace!(
"┝━ Adding clauses for package '{}'",
cache.provider().display_name(dependency_name),
);
if let Some(condition) = condition {
let condition_name = cache.provider().version_set_name(condition);
tracing::trace!(
"┝━ Adding conditional clauses for package '{}' with condition '{}' and version set '{}'",
cache.provider().display_name(dependency_name),
cache.provider().display_name(condition_name),
cache.provider().display_version_set(condition),
);
} else {
tracing::trace!(
"┝━ Adding clauses for package '{}'",
cache.provider().display_name(dependency_name),
);
}

pending_futures.push(
async move {
Expand Down Expand Up @@ -1917,6 +1927,13 @@ async fn add_clauses_for_solvables<D: DependencyProvider>(
}

if let Some((condition, condition_candidates)) = condition {
tracing::trace!(
"Adding conditional clauses for {} with condition {}",
requirement.display(cache.provider()),
std::convert::Into::<Requirement>::into(condition)
.display(cache.provider()),
);

let condition_version_set_variables = requirement_to_sorted_candidates.insert(
condition.into(),
condition_candidates
Expand Down
32 changes: 0 additions & 32 deletions tests/solver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1629,38 +1629,6 @@ fn test_circular_conditional_dependencies() {
"###);
}

#[test]
fn test_conditional_dependency_with_excluded() {
let mut provider = BundleBoxProvider::new();

// Setup packages
provider.add_package("trigger", 1.into(), &[], &[]);
provider.add_package("target", 1.into(), &[], &[]);

// Create conditional requirement:
// If trigger is installed, require target=1
let trigger_spec = Spec::parse_union("trigger 1").next().unwrap().unwrap();
let target_spec = Spec::parse_union("target 1").next().unwrap().unwrap();

let trigger_version_set = provider.intern_version_set(&trigger_spec);
let target_version_set = provider.intern_version_set(&target_spec);

let cond_req = ConditionalRequirement::new(trigger_version_set, target_version_set.into());

// Exclude target package
provider.exclude("target", 1, "it is externally excluded");

let requirements = vec![
cond_req,
trigger_version_set.into(), // Require trigger package
];

let mut solver = Solver::new(provider);
let problem = Problem::new().requirements(requirements);
// Should fail to solve because target is excluded but required by condition
assert!(solver.solve(problem).is_err());
}

#[cfg(feature = "serde")]
fn serialize_snapshot(snapshot: &DependencySnapshot, destination: impl AsRef<std::path::Path>) {
let file = std::io::BufWriter::new(std::fs::File::create(destination.as_ref()).unwrap());
Expand Down

0 comments on commit 286801b

Please sign in to comment.