@@ -137,10 +137,20 @@ pub fn resolve(
137
137
_ => None ,
138
138
} ;
139
139
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
+
140
144
let resolver_ctx = loop {
141
145
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
+ ) ?;
144
154
if registry. reset_pending ( ) {
145
155
break resolver_ctx;
146
156
} else {
@@ -194,14 +204,11 @@ fn activate_deps_loop(
194
204
summaries : & [ ( Summary , ResolveOpts ) ] ,
195
205
first_version : Option < VersionOrdering > ,
196
206
gctx : Option < & GlobalContext > ,
207
+ past_conflicting_activations : & mut conflict_cache:: ConflictCache ,
197
208
) -> CargoResult < ResolverContext > {
198
209
let mut backtrack_stack = Vec :: new ( ) ;
199
210
let mut remaining_deps = RemainingDeps :: new ( ) ;
200
211
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
-
205
212
// Activate all the initial summaries to kick off some work.
206
213
for ( summary, opts) in summaries {
207
214
debug ! ( "initial activation: {}" , summary. package_id( ) ) ;
@@ -313,7 +320,7 @@ fn activate_deps_loop(
313
320
if let Some ( c) = generalize_conflicting (
314
321
& resolver_ctx,
315
322
registry,
316
- & mut past_conflicting_activations,
323
+ past_conflicting_activations,
317
324
& parent,
318
325
& dep,
319
326
& conflicting_activations,
0 commit comments