Skip to content

Commit 4addf4c

Browse files
committed
fix(owners): add command to update all crate data
1 parent 85fe37d commit 4addf4c

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

src/bin/cratesfyi.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use humantime::Duration;
2525
use once_cell::sync::OnceCell;
2626
use sentry::TransactionContext;
2727
use tokio::runtime::{Builder, Runtime};
28+
use tracing::info;
2829
use tracing_log::LogTracer;
2930
use tracing_subscriber::{filter::Directive, prelude::*, EnvFilter};
3031

@@ -515,6 +516,9 @@ enum DatabaseSubcommand {
515516
/// Backfill GitHub/Gitlab stats for crates.
516517
BackfillRepositoryStats,
517518

519+
/// Backfill crate owner kind from crates.io API
520+
BackfillCrateOwnerKind,
521+
518522
/// Updates info for a crate from the registry's API
519523
UpdateCrateRegistryFields {
520524
#[arg(name = "CRATE")]
@@ -601,6 +605,37 @@ impl DatabaseSubcommand {
601605
.block_on(ctx.repository_stats_updater()?.backfill_repositories())?;
602606
}
603607

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+
604639
Self::UpdateCrateRegistryFields { name } => ctx.runtime()?.block_on(async move {
605640
let mut conn = ctx.pool()?.get_async().await?;
606641
let registry_data = ctx.registry_api()?.get_crate_data(&name).await?;

src/db/add_package.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,16 @@ pub async fn update_crate_data_in_database(
435435
.fetch_one(&mut *conn)
436436
.await?;
437437

438+
update_crate_data_in_db_by_id(conn, crate_id, registry_data).await?;
439+
440+
Ok(())
441+
}
442+
443+
pub async fn update_crate_data_in_db_by_id(
444+
conn: &mut sqlx::PgConnection,
445+
crate_id: i32,
446+
registry_data: &CrateData,
447+
) -> Result<()> {
438448
update_owners_in_database(conn, &registry_data.owners, crate_id).await?;
439449

440450
Ok(())

src/db/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ pub(crate) use self::add_package::{
77
add_build_into_database, add_doc_coverage, add_package_into_database,
88
};
99
pub use self::{
10-
add_package::{update_build_status, update_crate_data_in_database},
10+
add_package::{
11+
update_build_status, update_crate_data_in_database, update_crate_data_in_db_by_id,
12+
},
1113
delete::{delete_crate, delete_version},
1214
file::{add_path_into_database, add_path_into_remote_archive},
1315
overrides::Overrides,

0 commit comments

Comments
 (0)