@@ -83,38 +83,50 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
83
83
let available_at = now + chrono:: TimeDelta :: hours ( opts. availability_delay ) ;
84
84
85
85
for name in & crate_names {
86
- if let Some ( crate_info) = existing_crates. iter ( ) . find ( |info| info. name == * name) {
87
- let id = crate_info. id ;
88
-
89
- let deleted_crate = NewDeletedCrate :: builder ( name)
90
- . created_at ( & crate_info. created_at )
91
- . deleted_at ( & now)
92
- . deleted_by ( deleted_by. id )
93
- . maybe_message ( opts. message . as_deref ( ) )
94
- . available_at ( & available_at)
95
- . build ( ) ;
96
-
97
- info ! ( "{name}: Deleting crate from the database…" ) ;
98
- let result = conn
99
- . transaction ( |conn| delete_from_database ( conn, id, deleted_crate) . scope_boxed ( ) )
100
- . await ;
101
-
102
- if let Err ( error) = result {
103
- warn ! ( %id, "{name}: Failed to delete crate from the database: {error}" ) ;
86
+ let crate_id =
87
+ if let Some ( crate_info) = existing_crates. iter ( ) . find ( |info| info. name == * name) {
88
+ let id = crate_info. id ;
89
+
90
+ let deleted_crate = NewDeletedCrate :: builder ( name)
91
+ . created_at ( & crate_info. created_at )
92
+ . deleted_at ( & now)
93
+ . deleted_by ( deleted_by. id )
94
+ . maybe_message ( opts. message . as_deref ( ) )
95
+ . available_at ( & available_at)
96
+ . build ( ) ;
97
+
98
+ info ! ( "{name}: Deleting crate from the database…" ) ;
99
+ let result = conn
100
+ . transaction ( |conn| delete_from_database ( conn, id, deleted_crate) . scope_boxed ( ) )
101
+ . await ;
102
+
103
+ if let Err ( error) = result {
104
+ warn ! ( %id, "{name}: Failed to delete crate from the database: {error}" ) ;
105
+ } ;
106
+
107
+ Some ( id)
108
+ } else {
109
+ info ! ( "{name}: Skipped missing crate" ) ;
110
+
111
+ None
104
112
} ;
105
- } else {
106
- info ! ( "{name}: Skipped missing crate" ) ;
107
- } ;
108
113
109
114
info ! ( "{name}: Enqueuing background jobs…" ) ;
110
115
let git_index_job = jobs:: SyncToGitIndex :: new ( name) ;
111
116
let sparse_index_job = jobs:: SyncToSparseIndex :: new ( name) ;
112
- let delete_from_storage_job = jobs:: DeleteCrateFromStorage :: new ( name. into ( ) ) ;
117
+ let delete_from_storage_job = async |conn : & mut AsyncPgConnection | {
118
+ if let Some ( crate_id) = crate_id {
119
+ jobs:: DeleteCrateFromStorage :: new ( name. into ( ) , crate_id)
120
+ . enqueue ( conn)
121
+ . await ?;
122
+ }
123
+ Ok ( ( ) )
124
+ } ;
113
125
114
126
if let Err ( error) = tokio:: try_join!(
115
127
git_index_job. enqueue( & mut conn) ,
116
128
sparse_index_job. enqueue( & mut conn) ,
117
- delete_from_storage_job. enqueue ( & mut conn) ,
129
+ delete_from_storage_job( & mut conn) ,
118
130
) {
119
131
warn ! ( "{name}: Failed to enqueue background job: {error}" ) ;
120
132
}
0 commit comments