Skip to content

Commit c027833

Browse files
committed
admin/delete_crate: Print warning for crates with reverse dependencies
1 parent 1fc6226 commit c027833

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

src/admin/delete_crate.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use anyhow::Context;
55
use colored::Colorize;
66
use crates_io_worker::BackgroundJob;
77
use diesel::dsl::sql;
8-
use diesel::sql_types::{Array, Text};
8+
use diesel::sql_types::{Array, BigInt, Text};
99
use diesel::{ExpressionMethods, QueryDsl};
1010
use diesel_async::RunQueryDsl;
1111
use futures_util::TryStreamExt;
@@ -59,14 +59,24 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
5959
)
6060
"#,
6161
),
62+
sql::<BigInt>(
63+
r#"
64+
(SELECT COUNT(*)
65+
FROM dependencies
66+
WHERE dependencies.crate_id = crates.id)
67+
"#,
68+
),
6269
))
63-
.load_stream::<(String, i32, i64, Vec<String>)>(&mut conn)
70+
.load_stream::<(String, i32, i64, Vec<String>, i64)>(&mut conn)
6471
.await
6572
.context("Failed to look up crate name from the database")?
66-
.try_fold(HashMap::new(), |mut map, (name, id, downloads, owners)| {
67-
map.insert(name, CrateInfo::new(id, downloads, owners));
68-
futures_util::future::ready(Ok(map))
69-
})
73+
.try_fold(
74+
HashMap::new(),
75+
|mut map, (name, id, downloads, owners, rev_deps)| {
76+
map.insert(name, CrateInfo::new(id, downloads, owners, rev_deps));
77+
futures_util::future::ready(Ok(map))
78+
},
79+
)
7080
.await?;
7181

7282
println!("Deleting the following crates:");
@@ -126,14 +136,16 @@ struct CrateInfo {
126136
id: i32,
127137
downloads: i64,
128138
owners: Vec<String>,
139+
rev_deps: i64,
129140
}
130141

131142
impl CrateInfo {
132-
pub fn new(id: i32, downloads: i64, owners: Vec<String>) -> Self {
143+
pub fn new(id: i32, downloads: i64, owners: Vec<String>, rev_deps: i64) -> Self {
133144
Self {
134145
id,
135146
downloads,
136147
owners,
148+
rev_deps,
137149
}
138150
}
139151
}
@@ -148,6 +160,10 @@ impl Display for CrateInfo {
148160
let downloads = format!("downloads={}", self.downloads).bright_red().bold();
149161
write!(f, ", {downloads}")?;
150162
}
163+
if self.rev_deps > 0 {
164+
let rev_deps = format!("rev_deps={}", self.rev_deps).bright_red().bold();
165+
write!(f, ", {rev_deps}")?;
166+
}
151167

152168
Ok(())
153169
}

0 commit comments

Comments
 (0)