Skip to content

Commit eda029c

Browse files
committed
fix(owners): add command to update all crate data
1 parent af147de commit eda029c

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

src/bin/cratesfyi.rs

+35
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use futures_util::StreamExt;
2424
use humantime::Duration;
2525
use once_cell::sync::OnceCell;
2626
use tokio::runtime::{Builder, Runtime};
27+
use tracing::info;
2728
use tracing_log::LogTracer;
2829
use tracing_subscriber::{filter::Directive, prelude::*, EnvFilter};
2930

@@ -496,6 +497,9 @@ enum DatabaseSubcommand {
496497
/// Backfill GitHub/Gitlab stats for crates.
497498
BackfillRepositoryStats,
498499

500+
/// Backfill crate owner kind from crates.io API
501+
BackfillCrateOwnerKind,
502+
499503
/// Updates info for a crate from the registry's API
500504
UpdateCrateRegistryFields {
501505
#[arg(name = "CRATE")]
@@ -582,6 +586,37 @@ impl DatabaseSubcommand {
582586
.block_on(ctx.repository_stats_updater()?.backfill_repositories())?;
583587
}
584588

589+
Self::BackfillCrateOwnerKind => {
590+
let pool = ctx.pool()?;
591+
ctx.runtime()?
592+
.block_on(async {
593+
let mut list_crates_conn = pool.get_async().await?;
594+
let mut update_crates_conn = pool.get_async().await?;
595+
596+
let mut result_stream =
597+
sqlx::query!("SELECT id, name FROM crates ORDER BY name")
598+
.fetch(&mut *list_crates_conn);
599+
600+
while let Some(row) = result_stream.next().await {
601+
let row = row?;
602+
let registry_data =
603+
ctx.registry_api()?.get_crate_data(&row.name).await?;
604+
605+
info!("Updating crate {}", row.name);
606+
607+
db::update_crate_data_in_db_by_id(
608+
&mut update_crates_conn,
609+
row.id,
610+
&registry_data,
611+
)
612+
.await?;
613+
}
614+
615+
Ok::<(), anyhow::Error>(())
616+
})
617+
.context("Failed to backfill crate owner kind")?
618+
}
619+
585620
Self::UpdateCrateRegistryFields { name } => ctx.runtime()?.block_on(async move {
586621
let mut conn = ctx.pool()?.get_async().await?;
587622
let registry_data = ctx.registry_api()?.get_crate_data(&name).await?;

src/db/add_package.rs

+10
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,16 @@ pub async fn update_crate_data_in_database(
378378
.fetch_one(&mut *conn)
379379
.await?;
380380

381+
update_crate_data_in_db_by_id(conn, crate_id, registry_data).await?;
382+
383+
Ok(())
384+
}
385+
386+
pub async fn update_crate_data_in_db_by_id(
387+
conn: &mut sqlx::PgConnection,
388+
crate_id: i32,
389+
registry_data: &CrateData,
390+
) -> Result<()> {
381391
update_owners_in_database(conn, &registry_data.owners, crate_id).await?;
382392

383393
Ok(())

src/db/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ 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_crate_data_in_database,
10+
add_package::{update_crate_data_in_database, update_crate_data_in_db_by_id},
1111
delete::{delete_crate, delete_version},
1212
file::{add_path_into_database, add_path_into_remote_archive},
1313
overrides::Overrides,

0 commit comments

Comments
 (0)