@@ -25,6 +25,7 @@ use humantime::Duration;
25
25
use once_cell:: sync:: OnceCell ;
26
26
use sentry:: TransactionContext ;
27
27
use tokio:: runtime:: { Builder , Runtime } ;
28
+ use tracing:: info;
28
29
use tracing_log:: LogTracer ;
29
30
use tracing_subscriber:: { filter:: Directive , prelude:: * , EnvFilter } ;
30
31
@@ -515,6 +516,9 @@ enum DatabaseSubcommand {
515
516
/// Backfill GitHub/Gitlab stats for crates.
516
517
BackfillRepositoryStats ,
517
518
519
+ /// Backfill crate owner kind from crates.io API
520
+ BackfillCrateOwnerKind ,
521
+
518
522
/// Updates info for a crate from the registry's API
519
523
UpdateCrateRegistryFields {
520
524
#[ arg( name = "CRATE" ) ]
@@ -601,6 +605,37 @@ impl DatabaseSubcommand {
601
605
. block_on ( ctx. repository_stats_updater ( ) ?. backfill_repositories ( ) ) ?;
602
606
}
603
607
608
+ Self :: BackfillCrateOwnerKind => {
609
+ let pool = ctx. pool ( ) ?;
610
+ ctx. runtime ( ) ?
611
+ . block_on ( async {
612
+ let mut list_crates_conn = pool. get_async ( ) . await ?;
613
+ let mut update_crates_conn = pool. get_async ( ) . await ?;
614
+
615
+ let mut result_stream =
616
+ sqlx:: query!( "SELECT id, name FROM crates ORDER BY name" )
617
+ . fetch ( & mut * list_crates_conn) ;
618
+
619
+ while let Some ( row) = result_stream. next ( ) . await {
620
+ let row = row?;
621
+ let registry_data =
622
+ ctx. registry_api ( ) ?. get_crate_data ( & row. name ) . await ?;
623
+
624
+ info ! ( "Updating crate {}" , row. name) ;
625
+
626
+ db:: update_crate_data_in_db_by_id (
627
+ & mut update_crates_conn,
628
+ row. id ,
629
+ & registry_data,
630
+ )
631
+ . await ?;
632
+ }
633
+
634
+ Ok :: < ( ) , anyhow:: Error > ( ( ) )
635
+ } )
636
+ . context ( "Failed to backfill crate owner kind" ) ?
637
+ }
638
+
604
639
Self :: UpdateCrateRegistryFields { name } => ctx. runtime ( ) ?. block_on ( async move {
605
640
let mut conn = ctx. pool ( ) ?. get_async ( ) . await ?;
606
641
let registry_data = ctx. registry_api ( ) ?. get_crate_data ( & name) . await ?;
0 commit comments