parent: Summary,
dep: Dependency,
features: Rc<Vec<String>>,
- conflicting_activations: HashSet<PackageId>,
}
#[derive(Clone)]
// use (those with more candidates).
let mut backtrack_stack = Vec::new();
let mut remaining_deps = BinaryHeap::new();
- let mut conflicting_activations;
for &(ref summary, ref method) in summaries {
debug!("initial activation: {}", summary.package_id());
let candidate = Candidate { summary: summary.clone(), replace: None };
remaining: RcVecIter::new(Rc::clone(&candidates)),
conflicting_prev_active: HashSet::new(),
};
- conflicting_activations = HashSet::new();
(candidates.next(prev_active),
candidates.clone().next(prev_active).is_ok(),
candidates)
parent: Summary::clone(&parent),
dep: Dependency::clone(&dep),
features: Rc::clone(&features),
- conflicting_activations: conflicting_activations.clone(),
});
}
candidate
}
Err(mut conflicting) => {
- conflicting_activations.extend(conflicting.drain());
// This dependency has no valid candidate. Backtrack until we
// find a dependency that does have a candidate to try, and try
// to activate that one. This resets the `remaining_deps` to
&mut cur,
&mut dep,
&mut features,
- &mut conflicting_activations) {
+ &mut conflicting) {
None => return Err(activation_error(&cx, registry, &parent,
&dep,
- conflicting_activations,
+ conflicting,
&candidates, config)),
Some(candidate) => candidate,
}
*parent = frame.parent.clone();
*dep = frame.dep.clone();
*features = Rc::clone(&frame.features);
- *conflicting_activations = frame.conflicting_activations.clone();
backtrack_stack.push(frame);
} else {
*cx = frame.context_backup;
*parent = frame.parent;
*dep = frame.dep;
*features = frame.features;
- *conflicting_activations = frame.conflicting_activations
}
return Some(candidate);
}