11use crate :: schema:: { crate_owners, teams, users} ;
2- use crate :: tasks:: spawn_blocking;
32use crate :: worker:: jobs;
43use crate :: { admin:: dialoguer, db, schema:: crates} ;
54use anyhow:: Context ;
65use crates_io_worker:: BackgroundJob ;
76use diesel:: dsl:: sql;
87use diesel:: sql_types:: Text ;
98use diesel:: { ExpressionMethods , JoinOnDsl , QueryDsl } ;
10- use diesel_async:: async_connection_wrapper :: AsyncConnectionWrapper ;
9+ use diesel_async:: RunQueryDsl ;
1110use std:: collections:: HashMap ;
1211
1312#[ derive( clap:: Parser , Debug ) ]
@@ -34,24 +33,21 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
3433 let mut crate_names = opts. crate_names ;
3534 crate_names. sort ( ) ;
3635
37- let query_result = {
38- use diesel_async:: RunQueryDsl ;
39-
40- crates:: table
41- . select ( (
42- crates:: name,
43- crates:: id,
44- sql :: < Text > (
45- "CASE WHEN crate_owners.owner_kind = 1 THEN teams.login ELSE users.gh_login END" ,
46- ) ,
47- ) )
48- . left_join ( crate_owners:: table. on ( crate_owners:: crate_id. eq ( crates:: id) ) )
49- . left_join ( teams:: table. on ( teams:: id. eq ( crate_owners:: owner_id) ) )
50- . left_join ( users:: table. on ( users:: id. eq ( crate_owners:: owner_id) ) )
51- . filter ( crates:: name. eq_any ( & crate_names) )
52- . load :: < ( String , i32 , String ) > ( & mut conn) . await
53- . context ( "Failed to look up crate name from the database" )
54- } ?;
36+ let query_result = crates:: table
37+ . select ( (
38+ crates:: name,
39+ crates:: id,
40+ sql :: < Text > (
41+ "CASE WHEN crate_owners.owner_kind = 1 THEN teams.login ELSE users.gh_login END" ,
42+ ) ,
43+ ) )
44+ . left_join ( crate_owners:: table. on ( crate_owners:: crate_id. eq ( crates:: id) ) )
45+ . left_join ( teams:: table. on ( teams:: id. eq ( crate_owners:: owner_id) ) )
46+ . left_join ( users:: table. on ( users:: id. eq ( crate_owners:: owner_id) ) )
47+ . filter ( crates:: name. eq_any ( & crate_names) )
48+ . load :: < ( String , i32 , String ) > ( & mut conn)
49+ . await
50+ . context ( "Failed to look up crate name from the database" ) ?;
5551
5652 let mut existing_crates: HashMap < String , ( i32 , Vec < String > ) > = HashMap :: new ( ) ;
5753 for ( name, id, login) in query_result {
@@ -81,37 +77,36 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
8177 return Ok ( ( ) ) ;
8278 }
8379
84- spawn_blocking ( move || {
85- use diesel:: RunQueryDsl ;
86-
87- let conn: & mut AsyncConnectionWrapper < _ > = & mut conn. into ( ) ;
88-
89- for name in & crate_names {
90- if let Some ( ( id, _) ) = existing_crates. get ( name) {
91- info ! ( "{name}: Deleting crate from the database…" ) ;
92- if let Err ( error) = diesel:: delete ( crates:: table. find ( id) ) . execute ( conn) {
93- warn ! ( %id, "{name}: Failed to delete crate from the database: {error}" ) ;
94- }
95- } else {
96- info ! ( "{name}: Skipped missing crate" ) ;
97- } ;
98-
99- info ! ( "{name}: Enqueuing index sync jobs…" ) ;
100- if let Err ( error) = jobs:: SyncToGitIndex :: new ( name) . enqueue ( conn) {
101- warn ! ( "{name}: Failed to enqueue SyncToGitIndex job: {error}" ) ;
102- }
103- if let Err ( error) = jobs:: SyncToSparseIndex :: new ( name) . enqueue ( conn) {
104- warn ! ( "{name}: Failed to enqueue SyncToSparseIndex job: {error}" ) ;
80+ for name in & crate_names {
81+ if let Some ( ( id, _) ) = existing_crates. get ( name) {
82+ info ! ( "{name}: Deleting crate from the database…" ) ;
83+ if let Err ( error) = diesel:: delete ( crates:: table. find ( id) )
84+ . execute ( & mut conn)
85+ . await
86+ {
87+ warn ! ( %id, "{name}: Failed to delete crate from the database: {error}" ) ;
10588 }
89+ } else {
90+ info ! ( "{name}: Skipped missing crate" ) ;
91+ } ;
92+
93+ info ! ( "{name}: Enqueuing index sync jobs…" ) ;
94+ let job = jobs:: SyncToGitIndex :: new ( name) ;
95+ if let Err ( error) = job. async_enqueue ( & mut conn) . await {
96+ warn ! ( "{name}: Failed to enqueue SyncToGitIndex job: {error}" ) ;
97+ }
10698
107- info ! ( "{name}: Enqueuing DeleteCrateFromStorage job…" ) ;
108- let job = jobs:: DeleteCrateFromStorage :: new ( name. into ( ) ) ;
109- if let Err ( error) = job. enqueue ( conn) {
110- warn ! ( "{name}: Failed to enqueue DeleteCrateFromStorage job: {error}" ) ;
111- }
99+ let job = jobs:: SyncToSparseIndex :: new ( name) ;
100+ if let Err ( error) = job. async_enqueue ( & mut conn) . await {
101+ warn ! ( "{name}: Failed to enqueue SyncToSparseIndex job: {error}" ) ;
112102 }
113103
114- Ok ( ( ) )
115- } )
116- . await
104+ info ! ( "{name}: Enqueuing DeleteCrateFromStorage job…" ) ;
105+ let job = jobs:: DeleteCrateFromStorage :: new ( name. into ( ) ) ;
106+ if let Err ( error) = job. async_enqueue ( & mut conn) . await {
107+ warn ! ( "{name}: Failed to enqueue DeleteCrateFromStorage job: {error}" ) ;
108+ }
109+ }
110+
111+ Ok ( ( ) )
117112}
0 commit comments