A slow and ugly solution, but it works.
authorEh2406 <YeomanYaacov@gmail.com>
Sun, 18 Mar 2018 02:44:30 +0000 (22:44 -0400)
committerEh2406 <YeomanYaacov@gmail.com>
Fri, 23 Mar 2018 21:23:34 +0000 (17:23 -0400)
src/cargo/core/resolver/mod.rs

index 0e266ecf2a38dc993cc630571195f561c3bcd7a6..851af2d534f58e510d5724aeac844323157218d8 100644 (file)
@@ -1280,6 +1280,26 @@ fn activate_deps_loop(
                             has_past_conflicting_dep = true;
                         }
                     }
+                    if !has_past_conflicting_dep {
+                        'deps: for debs in remaining_deps.iter() {
+                            for (_, (other_dep, _, _)) in debs.remaining_siblings.clone() {
+                                if let Some(conflict) = past_conflicting_activations
+                                    .get(&other_dep)
+                                    .and_then(|past_bad| {
+                                        past_bad
+                                            .iter()
+                                            .find(|conflicting| conflicting.get(&pid).is_some())
+                                    }) {
+                                    conflicting_activations.insert(
+                                        debs.parent.package_id().clone(),
+                                        conflict.get(&pid).unwrap().clone(),
+                                    );
+                                    has_past_conflicting_dep = true;
+                                    break 'deps;
+                                }
+                            }
+                        }
+                    }
 
                     // Ok if we're in a "known failure" state for this frame we
                     // may want to skip it altogether though. We don't want to