Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions src/cargo/core/resolver/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,20 @@ pub fn resolve(
_ => None,
};
let mut registry = RegistryQueryer::new(registry, replacements, version_prefs);

// Global cache of the reasons for each time we backtrack.
let mut past_conflicting_activations = conflict_cache::ConflictCache::new();

let resolver_ctx = loop {
let resolver_ctx = ResolverContext::new();
let resolver_ctx =
activate_deps_loop(resolver_ctx, &mut registry, summaries, first_version, gctx)?;
let resolver_ctx = activate_deps_loop(
resolver_ctx,
&mut registry,
summaries,
first_version,
gctx,
&mut past_conflicting_activations,
)?;
if registry.reset_pending() {
break resolver_ctx;
} else {
Expand Down Expand Up @@ -194,14 +204,11 @@ fn activate_deps_loop(
summaries: &[(Summary, ResolveOpts)],
first_version: Option<VersionOrdering>,
gctx: Option<&GlobalContext>,
past_conflicting_activations: &mut conflict_cache::ConflictCache,
) -> CargoResult<ResolverContext> {
let mut backtrack_stack = Vec::new();
let mut remaining_deps = RemainingDeps::new();

// `past_conflicting_activations` is a cache of the reasons for each time we
// backtrack.
let mut past_conflicting_activations = conflict_cache::ConflictCache::new();

// Activate all the initial summaries to kick off some work.
for (summary, opts) in summaries {
debug!("initial activation: {}", summary.package_id());
Expand Down Expand Up @@ -313,7 +320,7 @@ fn activate_deps_loop(
if let Some(c) = generalize_conflicting(
&resolver_ctx,
registry,
&mut past_conflicting_activations,
past_conflicting_activations,
&parent,
&dep,
&conflicting_activations,
Expand Down