Skip to content

Commit 46ea11a

Browse files
committed
fix(resolver): share conflict cache between activation retries
1 parent 3c4c0a2 commit 46ea11a

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/cargo/core/resolver/mod.rs

+14-7
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,20 @@ pub fn resolve(
137137
_ => None,
138138
};
139139
let mut registry = RegistryQueryer::new(registry, replacements, version_prefs);
140+
141+
// Global cache of the reasons for each time we backtrack.
142+
let mut past_conflicting_activations = conflict_cache::ConflictCache::new();
143+
140144
let resolver_ctx = loop {
141145
let resolver_ctx = ResolverContext::new();
142-
let resolver_ctx =
143-
activate_deps_loop(resolver_ctx, &mut registry, summaries, first_version, gctx)?;
146+
let resolver_ctx = activate_deps_loop(
147+
resolver_ctx,
148+
&mut registry,
149+
summaries,
150+
first_version,
151+
gctx,
152+
&mut past_conflicting_activations,
153+
)?;
144154
if registry.reset_pending() {
145155
break resolver_ctx;
146156
} else {
@@ -194,14 +204,11 @@ fn activate_deps_loop(
194204
summaries: &[(Summary, ResolveOpts)],
195205
first_version: Option<VersionOrdering>,
196206
gctx: Option<&GlobalContext>,
207+
past_conflicting_activations: &mut conflict_cache::ConflictCache,
197208
) -> CargoResult<ResolverContext> {
198209
let mut backtrack_stack = Vec::new();
199210
let mut remaining_deps = RemainingDeps::new();
200211

201-
// `past_conflicting_activations` is a cache of the reasons for each time we
202-
// backtrack.
203-
let mut past_conflicting_activations = conflict_cache::ConflictCache::new();
204-
205212
// Activate all the initial summaries to kick off some work.
206213
for (summary, opts) in summaries {
207214
debug!("initial activation: {}", summary.package_id());
@@ -313,7 +320,7 @@ fn activate_deps_loop(
313320
if let Some(c) = generalize_conflicting(
314321
&resolver_ctx,
315322
registry,
316-
&mut past_conflicting_activations,
323+
past_conflicting_activations,
317324
&parent,
318325
&dep,
319326
&conflicting_activations,

0 commit comments

Comments
 (0)