@@ -21,13 +21,15 @@ use crate::core::manifest::ManifestMetadata;
21
21
use crate :: core:: resolver:: CliFeatures ;
22
22
use crate :: core:: Dependency ;
23
23
use crate :: core:: Package ;
24
+ use crate :: core:: PackageId ;
24
25
use crate :: core:: PackageIdSpecQuery ;
25
26
use crate :: core:: SourceId ;
26
27
use crate :: core:: Workspace ;
27
28
use crate :: ops;
28
29
use crate :: ops:: PackageOpts ;
29
30
use crate :: ops:: Packages ;
30
31
use crate :: sources:: source:: QueryKind ;
32
+ use crate :: sources:: source:: Source ;
31
33
use crate :: sources:: SourceConfigMap ;
32
34
use crate :: sources:: CRATES_IO_REGISTRY ;
33
35
use crate :: util:: auth;
@@ -189,14 +191,12 @@ fn wait_for_publish(
189
191
pkg : & Package ,
190
192
timeout : Duration ,
191
193
) -> CargoResult < ( ) > {
192
- let version_req = format ! ( "={}" , pkg. version( ) ) ;
193
194
let mut source = SourceConfigMap :: empty ( gctx) ?. load ( registry_src, & HashSet :: new ( ) ) ?;
194
195
// Disable the source's built-in progress bars. Repeatedly showing a bunch
195
196
// of independent progress bars can be a little confusing. There is an
196
197
// overall progress bar managed here.
197
198
source. set_quiet ( true ) ;
198
199
let source_description = source. source_id ( ) . to_string ( ) ;
199
- let query = Dependency :: parse ( pkg. name ( ) , Some ( & version_req) , registry_src) ?;
200
200
201
201
let now = std:: time:: Instant :: now ( ) ;
202
202
let sleep_time = Duration :: from_secs ( 1 ) ;
@@ -223,16 +223,7 @@ fn wait_for_publish(
223
223
// multiple times
224
224
gctx. updated_sources ( ) . remove ( & source. replaced_source_id ( ) ) ;
225
225
source. invalidate_cache ( ) ;
226
- let summaries = loop {
227
- // Exact to avoid returning all for path/git
228
- match source. query_vec ( & query, QueryKind :: Exact ) {
229
- std:: task:: Poll :: Ready ( res) => {
230
- break res?;
231
- }
232
- std:: task:: Poll :: Pending => source. block_until_ready ( ) ?,
233
- }
234
- } ;
235
- if !summaries. is_empty ( ) {
226
+ if poll_one_package ( registry_src, & pkg. package_id ( ) , & mut source) ? {
236
227
break true ;
237
228
}
238
229
}
@@ -262,6 +253,25 @@ fn wait_for_publish(
262
253
Ok ( ( ) )
263
254
}
264
255
256
+ fn poll_one_package (
257
+ registry_src : SourceId ,
258
+ pkg_id : & PackageId ,
259
+ source : & mut dyn Source ,
260
+ ) -> CargoResult < bool > {
261
+ let version_req = format ! ( "={}" , pkg_id. version( ) ) ;
262
+ let query = Dependency :: parse ( pkg_id. name ( ) , Some ( & version_req) , registry_src) ?;
263
+ let summaries = loop {
264
+ // Exact to avoid returning all for path/git
265
+ match source. query_vec ( & query, QueryKind :: Exact ) {
266
+ std:: task:: Poll :: Ready ( res) => {
267
+ break res?;
268
+ }
269
+ std:: task:: Poll :: Pending => source. block_until_ready ( ) ?,
270
+ }
271
+ } ;
272
+ Ok ( !summaries. is_empty ( ) )
273
+ }
274
+
265
275
fn verify_dependencies (
266
276
pkg : & Package ,
267
277
registry : & Registry ,
0 commit comments