@@ -7,7 +7,6 @@ use crate::utils::{get_config, get_crate_priority, report_error, set_config, Con
77use crate :: { Config , Index , Metrics , RustwideBuilder } ;
88use anyhow:: Context ;
99
10- use crates_index_diff:: Change ;
1110use tracing:: { debug, error, info, instrument, warn} ;
1211
1312use std:: collections:: HashMap ;
@@ -309,67 +308,63 @@ impl BuildQueue {
309308 changes. reverse ( ) ;
310309
311310 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) ,
335320 }
321+ if let Err ( err) = cdn:: invalidate_crate ( & self . config , & self . cdn , krate) {
322+ report_error ( & err) ;
323+ }
324+ continue ;
325+ }
336326
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
346341 )
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 ;
361349 }
350+ Err ( err) => report_error ( & err) ,
362351 }
352+ }
363353
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) ;
373368 }
374369 }
375370 }
0 commit comments