@@ -15,20 +15,17 @@ use super::{CrateId, update_latest_version_id};
1515static LIBRARY_STORAGE_PATHS_TO_DELETE : & [ & str ] = & [ "rustdoc" , "rustdoc-json" , "sources" ] ;
1616static OTHER_STORAGE_PATHS_TO_DELETE : & [ & str ] = & [ "sources" ] ;
1717
18- #[ derive( Debug , thiserror:: Error ) ]
19- enum CrateDeletionError {
20- #[ error( "crate is missing: {0}" ) ]
21- MissingCrate ( String ) ,
22- }
23-
2418#[ context( "error trying to delete crate {name} from database" ) ]
2519pub async fn delete_crate (
2620 conn : & mut sqlx:: PgConnection ,
2721 storage : & AsyncStorage ,
2822 config : & Config ,
2923 name : & str ,
3024) -> Result < ( ) > {
31- let crate_id = get_id ( conn, name) . await ?;
25+ let Some ( crate_id) = get_id ( conn, name) . await ? else {
26+ return Ok ( ( ) ) ;
27+ } ;
28+
3229 let is_library = delete_crate_from_database ( conn, name, crate_id) . await ?;
3330 // #899
3431 let paths = if is_library {
@@ -68,7 +65,11 @@ pub async fn delete_version(
6865 name : & str ,
6966 version : & Version ,
7067) -> Result < ( ) > {
71- let is_library = delete_version_from_database ( conn, name, version) . await ?;
68+ let Some ( crate_id) = get_id ( conn, name) . await ? else {
69+ return Ok ( ( ) ) ;
70+ } ;
71+
72+ let is_library = delete_version_from_database ( conn, crate_id, version) . await ?;
7273 let paths = if is_library {
7374 LIBRARY_STORAGE_PATHS_TO_DELETE
7475 } else {
@@ -105,7 +106,7 @@ pub async fn delete_version(
105106 Ok ( ( ) )
106107}
107108
108- async fn get_id ( conn : & mut sqlx:: PgConnection , name : & str ) -> Result < CrateId > {
109+ async fn get_id ( conn : & mut sqlx:: PgConnection , name : & str ) -> Result < Option < CrateId > > {
109110 Ok ( sqlx:: query_scalar!(
110111 r#"
111112 SELECT id as "id: CrateId"
@@ -115,8 +116,7 @@ async fn get_id(conn: &mut sqlx::PgConnection, name: &str) -> Result<CrateId> {
115116 name
116117 )
117118 . fetch_optional ( & mut * conn)
118- . await ?
119- . ok_or_else ( || CrateDeletionError :: MissingCrate ( name. into ( ) ) ) ?)
119+ . await ?)
120120}
121121
122122// metaprogramming!
@@ -131,10 +131,9 @@ const METADATA: &[(&str, &str)] = &[
131131/// Returns whether this release was a library
132132async fn delete_version_from_database (
133133 conn : & mut sqlx:: PgConnection ,
134- name : & str ,
134+ crate_id : CrateId ,
135135 version : & Version ,
136136) -> Result < bool > {
137- let crate_id = get_id ( conn, name) . await ?;
138137 let mut transaction = conn. begin ( ) . await ?;
139138 for & ( table, column) in METADATA {
140139 sqlx:: query (
@@ -152,20 +151,6 @@ async fn delete_version_from_database(
152151
153152 update_latest_version_id ( & mut transaction, crate_id) . await ?;
154153
155- let paths = if is_library {
156- LIBRARY_STORAGE_PATHS_TO_DELETE
157- } else {
158- OTHER_STORAGE_PATHS_TO_DELETE
159- } ;
160- for prefix in paths {
161- sqlx:: query!(
162- "DELETE FROM files WHERE path LIKE $1;" ,
163- format!( "{prefix}/{name}/{version}/%" ) ,
164- )
165- . execute ( & mut * transaction)
166- . await ?;
167- }
168-
169154 transaction. commit ( ) . await ?;
170155 Ok ( is_library)
171156}
0 commit comments