@@ -5,7 +5,7 @@ use anyhow::Context;
55use colored:: Colorize ;
66use crates_io_worker:: BackgroundJob ;
77use diesel:: dsl:: sql;
8- use diesel:: sql_types:: { Array , Text } ;
8+ use diesel:: sql_types:: { Array , BigInt , Text } ;
99use diesel:: { ExpressionMethods , QueryDsl } ;
1010use diesel_async:: RunQueryDsl ;
1111use futures_util:: TryStreamExt ;
@@ -59,14 +59,30 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
5959 )
6060 "# ,
6161 ) ,
62+ sql :: < BigInt > (
63+ // This is an incorrect reverse dependencies query, since it
64+ // includes the `dependencies` rows for all versions, not just
65+ // the "default version" per crate. However, it's good enough
66+ // for our purposes here.
67+ r#"
68+ (
69+ SELECT COUNT(*)
70+ FROM dependencies
71+ WHERE dependencies.crate_id = crates.id
72+ )
73+ "# ,
74+ ) ,
6275 ) )
63- . load_stream :: < ( String , i32 , i64 , Vec < String > ) > ( & mut conn)
76+ . load_stream :: < ( String , i32 , i64 , Vec < String > , i64 ) > ( & mut conn)
6477 . await
6578 . 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- } )
79+ . try_fold (
80+ HashMap :: new ( ) ,
81+ |mut map, ( name, id, downloads, owners, rev_deps) | {
82+ map. insert ( name, CrateInfo :: new ( id, downloads, owners, rev_deps) ) ;
83+ futures_util:: future:: ready ( Ok ( map) )
84+ } ,
85+ )
7086 . await ?;
7187
7288 println ! ( "Deleting the following crates:" ) ;
@@ -126,14 +142,16 @@ struct CrateInfo {
126142 id : i32 ,
127143 downloads : i64 ,
128144 owners : Vec < String > ,
145+ rev_deps : i64 ,
129146}
130147
131148impl CrateInfo {
132- pub fn new ( id : i32 , downloads : i64 , owners : Vec < String > ) -> Self {
149+ pub fn new ( id : i32 , downloads : i64 , owners : Vec < String > , rev_deps : i64 ) -> Self {
133150 Self {
134151 id,
135152 downloads,
136153 owners,
154+ rev_deps,
137155 }
138156 }
139157}
@@ -148,6 +166,10 @@ impl Display for CrateInfo {
148166 let downloads = format ! ( "downloads={}" , self . downloads) . bright_red ( ) . bold ( ) ;
149167 write ! ( f, ", {downloads}" ) ?;
150168 }
169+ if self . rev_deps > 0 {
170+ let rev_deps = format ! ( "rev_deps={}" , self . rev_deps) . bright_red ( ) . bold ( ) ;
171+ write ! ( f, ", {rev_deps}" ) ?;
172+ }
151173
152174 Ok ( ( ) )
153175 }
0 commit comments