77pub mod helpers;
88pub mod sat;
99
10+ use std:: cell:: RefCell ;
1011use std:: cmp:: { max, min} ;
1112use std:: collections:: { BTreeMap , HashSet } ;
1213use std:: fmt;
13- use std:: task:: Poll ;
1414use std:: time:: Instant ;
1515
1616use cargo:: core:: Resolve ;
1717use cargo:: core:: ResolveVersion ;
1818use cargo:: core:: SourceId ;
1919use cargo:: core:: dependency:: DepKind ;
20+ use cargo:: core:: registry:: DynRegistry ;
2021use cargo:: core:: resolver:: { self , ResolveOpts , VersionOrdering , VersionPreferences } ;
2122use cargo:: core:: { Dependency , PackageId , Registry , Summary } ;
2223use cargo:: sources:: IndexSummary ;
@@ -131,15 +132,16 @@ pub fn resolve_with_global_context_raw(
131132) -> CargoResult < Resolve > {
132133 struct MyRegistry < ' a > {
133134 list : & ' a [ Summary ] ,
134- used : HashSet < PackageId > ,
135+ used : RefCell < HashSet < PackageId > > ,
135136 }
137+
136138 impl < ' a > Registry for MyRegistry < ' a > {
137- fn query (
138- & mut self ,
139+ async fn query (
140+ & self ,
139141 dep : & Dependency ,
140142 kind : QueryKind ,
141143 f : & mut dyn FnMut ( IndexSummary ) ,
142- ) -> Poll < CargoResult < ( ) > > {
144+ ) -> CargoResult < ( ) > {
143145 for summary in self . list . iter ( ) {
144146 let matched = match kind {
145147 QueryKind :: Exact => dep. matches ( summary) ,
@@ -148,11 +150,11 @@ pub fn resolve_with_global_context_raw(
148150 QueryKind :: Normalized => true ,
149151 } ;
150152 if matched {
151- self . used . insert ( summary. package_id ( ) ) ;
153+ self . used . borrow_mut ( ) . insert ( summary. package_id ( ) ) ;
152154 f ( IndexSummary :: Candidate ( summary. clone ( ) ) ) ;
153155 }
154156 }
155- Poll :: Ready ( Ok ( ( ) ) )
157+ Ok ( ( ) )
156158 }
157159
158160 fn describe_source ( & self , _src : SourceId ) -> String {
@@ -162,22 +164,18 @@ pub fn resolve_with_global_context_raw(
162164 fn is_replaced ( & self , _src : SourceId ) -> bool {
163165 false
164166 }
165-
166- fn block_until_ready ( & mut self ) -> CargoResult < ( ) > {
167- Ok ( ( ) )
168- }
169167 }
170168 impl < ' a > Drop for MyRegistry < ' a > {
171169 fn drop ( & mut self ) {
172- if std:: thread:: panicking ( ) && self . list . len ( ) != self . used . len ( ) {
170+ if std:: thread:: panicking ( ) && self . list . len ( ) != self . used . get_mut ( ) . len ( ) {
173171 // we found a case that causes a panic and did not use all of the input.
174172 // lets print the part of the input that was used for minimization.
175173 eprintln ! (
176174 "Part used before drop: {:?}" ,
177175 PrettyPrintRegistry (
178176 self . list
179177 . iter( )
180- . filter( |s| { self . used. contains( & s. package_id( ) ) } )
178+ . filter( |s| { self . used. get_mut ( ) . contains( & s. package_id( ) ) } )
181179 . cloned( )
182180 . collect( )
183181 )
@@ -187,7 +185,7 @@ pub fn resolve_with_global_context_raw(
187185 }
188186 let mut registry = MyRegistry {
189187 list : registry,
190- used : HashSet :: new ( ) ,
188+ used : RefCell :: new ( HashSet :: new ( ) ) ,
191189 } ;
192190
193191 let root_summary =
@@ -204,7 +202,7 @@ pub fn resolve_with_global_context_raw(
204202 let resolve = resolver:: resolve (
205203 & [ ( root_summary, opts) ] ,
206204 & [ ] ,
207- & mut registry,
205+ DynRegistry :: from_mut ( & mut registry) ,
208206 & version_prefs,
209207 ResolveVersion :: with_rust_version ( None ) ,
210208 Some ( gctx) ,
0 commit comments