Skip to content

Commit 1b41ab7

Browse files
committed
fix deleting crates/releases when these failed before the build
1 parent 1bec9ea commit 1b41ab7

File tree

1 file changed

+54
-4
lines changed

1 file changed

+54
-4
lines changed

src/db/delete.rs

+54-4
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,9 @@ fn delete_version_from_database(conn: &mut Client, name: &str, version: &str) ->
130130
"DELETE FROM releases WHERE crate_id = $1 AND version = $2 RETURNING is_library",
131131
&[&crate_id, &version],
132132
)?
133-
.get("is_library");
133+
.get::<_, Option<bool>>("is_library")
134+
.unwrap_or(false);
135+
134136
transaction.execute(
135137
"UPDATE crates SET latest_version_id = (
136138
SELECT id FROM releases WHERE release_time = (
@@ -174,7 +176,8 @@ fn delete_crate_from_database(conn: &mut Client, name: &str, crate_id: i32) -> R
174176
)?;
175177
}
176178
transaction.execute("DELETE FROM owner_rels WHERE cid = $1;", &[&crate_id])?;
177-
let has_library = transaction
179+
180+
let has_library: bool = transaction
178181
.query_one(
179182
"SELECT
180183
BOOL_OR(releases.is_library) AS has_library
@@ -183,7 +186,9 @@ fn delete_crate_from_database(conn: &mut Client, name: &str, crate_id: i32) -> R
183186
",
184187
&[&crate_id],
185188
)?
186-
.get("has_library");
189+
.get::<_, Option<bool>>("has_library")
190+
.unwrap_or(false);
191+
187192
transaction.execute("DELETE FROM releases WHERE crate_id = $1;", &[&crate_id])?;
188193
transaction.execute("DELETE FROM crates WHERE id = $1;", &[&crate_id])?;
189194

@@ -197,7 +202,7 @@ fn delete_crate_from_database(conn: &mut Client, name: &str, crate_id: i32) -> R
197202
mod tests {
198203
use super::*;
199204
use crate::registry_api::{CrateOwner, OwnerKind};
200-
use crate::test::{assert_success, wrapper};
205+
use crate::test::{assert_success, fake_release_that_failed_before_build, wrapper};
201206
use test_case::test_case;
202207

203208
fn crate_exists(conn: &mut Client, name: &str) -> Result<bool> {
@@ -420,4 +425,49 @@ mod tests {
420425
Ok(())
421426
})
422427
}
428+
429+
#[test]
430+
fn test_delete_incomplete_version() {
431+
wrapper(|env| {
432+
let db = env.db();
433+
434+
let (release_id, _) = env
435+
.runtime()
436+
.block_on(async {
437+
let mut conn = db.async_conn().await;
438+
fake_release_that_failed_before_build(&mut conn, "a", "1.0.0", "some-error")
439+
.await
440+
})
441+
.unwrap();
442+
443+
delete_version(&mut db.conn(), &env.storage(), &env.config(), "a", "1.0.0")?;
444+
445+
assert!(!release_exists(&mut db.conn(), release_id)?);
446+
447+
Ok(())
448+
})
449+
}
450+
451+
#[test]
452+
fn test_delete_incomplete_crate() {
453+
wrapper(|env| {
454+
let db = env.db();
455+
456+
let (release_id, _) = env
457+
.runtime()
458+
.block_on(async {
459+
let mut conn = db.async_conn().await;
460+
fake_release_that_failed_before_build(&mut conn, "a", "1.0.0", "some-error")
461+
.await
462+
})
463+
.unwrap();
464+
465+
delete_crate(&mut db.conn(), &env.storage(), &env.config(), "a")?;
466+
467+
assert!(!crate_exists(&mut db.conn(), "a")?);
468+
assert!(!release_exists(&mut db.conn(), release_id)?);
469+
470+
Ok(())
471+
})
472+
}
423473
}

0 commit comments

Comments
 (0)