warnings: RcList<String>,
}
-type Activations = HashMap<InternedString, HashMap<SourceId, Rc<Vec<Summary>>>>;
+type Activations = HashMap<(InternedString, SourceId), Rc<Vec<Summary>>>;
/// Builds the list of all packages required to build the first argument.
pub fn resolve(summaries: &[(Summary, Method)],
};
for summary in cx.activations.values()
- .flat_map(|v| v.values())
.flat_map(|v| v.iter()) {
let cksum = summary.checksum().map(|s| s.to_string());
resolve.checksums.insert(summary.package_id().clone(), cksum);
method: &Method) -> CargoResult<bool> {
let id = summary.package_id();
let prev = self.activations
- .entry(InternedString::new(id.name()))
- .or_insert_with(HashMap::new)
- .entry(id.source_id().clone())
+ .entry((InternedString::new(id.name()), id.source_id().clone()))
.or_insert_with(||Rc::new(Vec::new()));
if !prev.iter().any(|c| c == summary) {
self.resolve_graph.push(GraphNode::Add(id.clone()));
}
fn prev_active(&self, dep: &Dependency) -> &[Summary] {
- self.activations.get(&InternedString::new(dep.name()))
- .and_then(|v| v.get(dep.source_id()))
+ self.activations.get(&(InternedString::new(dep.name()), dep.source_id().clone()))
.map(|v| &v[..])
.unwrap_or(&[])
}
fn is_active(&self, id: &PackageId) -> bool {
- self.activations.get(&InternedString::new(id.name()))
- .and_then(|v| v.get(id.source_id()))
+ self.activations.get(&(InternedString::new(id.name()), id.source_id().clone()))
.map(|v| v.iter().any(|s| s.package_id() == id))
.unwrap_or(false)
}
fn check_cycles(resolve: &Resolve, activations: &Activations)
-> CargoResult<()> {
let summaries: HashMap<&PackageId, &Summary> = activations.values()
- .flat_map(|v| v.values())
.flat_map(|v| v.iter())
.map(|s| (s.package_id(), s))
.collect();