@@ -7,7 +7,6 @@ use crate::utils::{get_config, get_crate_priority, report_error, set_config, Con
7
7
use crate :: { Config , Index , Metrics , RustwideBuilder } ;
8
8
use anyhow:: Context ;
9
9
10
- use crates_index_diff:: Change ;
11
10
use tracing:: { debug, error, info, instrument, warn} ;
12
11
13
12
use std:: collections:: HashMap ;
@@ -309,67 +308,63 @@ impl BuildQueue {
309
308
changes. reverse ( ) ;
310
309
311
310
for change in & changes {
312
- match change {
313
- Change :: Yanked ( release)
314
- | Change :: Unyanked ( release)
315
- // FIXME: the correct handling of `AddedAndYanked` is probably
316
- // running the build and direcctly yanking the release.
317
- // looking at
318
- // https://github.com/Byron/crates-index-diff-rs/commit/8256cbbd3651073394d6aa9de38c734618df9102
319
- // The same change previously lead to a simple `Yanked` change, which would
320
- // be ignored by us because we don't find the release.
321
- // This is best fixed together with other edge-cases like
322
- // a release being yanked while the build is still queued or running.
323
- | Change :: AddedAndYanked ( release) => {
324
- set_yanked (
325
- & mut conn,
326
- release. name . as_str ( ) ,
327
- release. version . as_str ( ) ,
328
- !matches ! ( change, Change :: Unyanked ( _) ) ,
329
- ) ;
330
-
331
- if let Err ( err) = cdn:: invalidate_crate ( & self . config , & self . cdn , & release. name )
332
- {
333
- report_error ( & err) ;
334
- }
311
+ if let Some ( ( ref krate, ..) ) = change. deleted ( ) {
312
+ match delete_crate ( & mut conn, & self . storage , & self . config , krate)
313
+ . with_context ( || format ! ( "failed to delete crate {}" , krate) )
314
+ {
315
+ Ok ( _) => info ! (
316
+ "crate {} was deleted from the index and will be deleted from the database" ,
317
+ krate
318
+ ) ,
319
+ Err ( err) => report_error ( & err) ,
335
320
}
321
+ if let Err ( err) = cdn:: invalidate_crate ( & self . config , & self . cdn , krate) {
322
+ report_error ( & err) ;
323
+ }
324
+ continue ;
325
+ }
336
326
337
- Change :: Added ( release) => {
338
- let priority = get_crate_priority ( & mut conn, & release. name ) ?;
339
-
340
- match self
341
- . add_crate (
342
- & release. name ,
343
- & release. version ,
344
- priority,
345
- index. repository_url ( ) ,
327
+ if let Some ( release) = change. added ( ) {
328
+ let priority = get_crate_priority ( & mut conn, & release. name ) ?;
329
+
330
+ match self
331
+ . add_crate (
332
+ & release. name ,
333
+ & release. version ,
334
+ priority,
335
+ index. repository_url ( ) ,
336
+ )
337
+ . with_context ( || {
338
+ format ! (
339
+ "failed adding {}-{} into build queue" ,
340
+ release. name, release. version
346
341
)
347
- . with_context ( || {
348
- format ! (
349
- "failed adding {}-{} into build queue" ,
350
- release. name, release. version
351
- )
352
- } ) {
353
- Ok ( ( ) ) => {
354
- debug ! (
355
- "{}-{} added into build queue" ,
356
- release. name, release. version
357
- ) ;
358
- crates_added += 1 ;
359
- }
360
- Err ( err) => report_error ( & err) ,
342
+ } ) {
343
+ Ok ( ( ) ) => {
344
+ debug ! (
345
+ "{}-{} added into build queue" ,
346
+ release. name, release. version
347
+ ) ;
348
+ crates_added += 1 ;
361
349
}
350
+ Err ( err) => report_error ( & err) ,
362
351
}
352
+ }
363
353
364
- Change :: Deleted { name : krate, .. } => {
365
- match delete_crate ( & mut conn, & self . storage , & self . config , krate)
366
- . with_context ( || format ! ( "failed to delete crate {}" , krate) ) {
367
- Ok ( _) => info ! ( "crate {} was deleted from the index and will be deleted from the database" , krate) ,
368
- Err ( err) => report_error ( & err) ,
369
- }
370
- if let Err ( err) = cdn:: invalidate_crate ( & self . config , & self . cdn , krate) {
371
- report_error ( & err) ;
372
- }
354
+ let yanked = change. yanked ( ) ;
355
+ let unyanked = change. unyanked ( ) ;
356
+ if let Some ( release) = yanked. or ( unyanked) {
357
+ // FIXME: delay yanks of crates that have not yet finished building
358
+ // https://github.com/rust-lang/docs.rs/issues/1934
359
+ set_yanked (
360
+ & mut conn,
361
+ release. name . as_str ( ) ,
362
+ release. version . as_str ( ) ,
363
+ yanked. is_some ( ) ,
364
+ ) ;
365
+
366
+ if let Err ( err) = cdn:: invalidate_crate ( & self . config , & self . cdn , & release. name ) {
367
+ report_error ( & err) ;
373
368
}
374
369
}
375
370
}
0 commit comments