Skip to content

Commit a96a6d4

Browse files
committed
refactor add_package_into_database into pure finish_release for updating
1 parent 10847e1 commit a96a6d4

6 files changed

+119
-130
lines changed

.sqlx/query-4329c81108a6b8832645e3a7256375df1d6b84bb2c32adc999c6afa2cfce5314.json

-70
This file was deleted.

.sqlx/query-5cf9b185b54dde447b6ba1458178c4fad4c75e72c6a7b7735d17835b9b746ac3.json

+61
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/db/add_package.rs

+40-51
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::{
77
utils::{rustc_version::parse_rustc_date, MetadataPackage},
88
web::crate_details::{latest_release, releases_for_crate},
99
};
10-
use anyhow::Context;
10+
use anyhow::{anyhow, Context};
1111
use derive_more::Display;
1212
use futures_util::stream::TryStreamExt;
1313
use serde::Serialize;
@@ -41,8 +41,10 @@ pub struct BuildId(pub i32);
4141
/// not the files generated by rustdoc.
4242
#[allow(clippy::too_many_arguments)]
4343
#[instrument(skip(conn, compression_algorithms))]
44-
pub(crate) async fn add_package_into_database(
44+
pub(crate) async fn finish_release(
4545
conn: &mut sqlx::PgConnection,
46+
crate_id: CrateId,
47+
release_id: ReleaseId,
4648
metadata_pkg: &MetadataPackage,
4749
source_dir: &Path,
4850
default_target: &str,
@@ -55,59 +57,42 @@ pub(crate) async fn add_package_into_database(
5557
repository_id: Option<i32>,
5658
archive_storage: bool,
5759
source_size: u64,
58-
) -> Result<ReleaseId> {
59-
debug!("Adding package into database");
60-
let crate_id = initialize_crate(conn, &metadata_pkg.name).await?;
60+
) -> Result<()> {
61+
debug!("updating release data");
6162
let dependencies = convert_dependencies(metadata_pkg);
6263
let rustdoc = get_rustdoc(metadata_pkg, source_dir).unwrap_or(None);
6364
let readme = get_readme(metadata_pkg, source_dir).unwrap_or(None);
6465
let features = get_features(metadata_pkg);
6566
let is_library = metadata_pkg.is_library();
6667

67-
let release_id = sqlx::query_scalar!(
68-
r#"INSERT INTO releases (
69-
crate_id, version, release_time,
70-
dependencies, target_name, yanked,
71-
rustdoc_status, test_status, license, repository_url,
72-
homepage_url, description, description_long, readme,
73-
keywords, have_examples, downloads, files,
74-
doc_targets, is_library,
75-
documentation_url, default_target, features,
76-
repository_id, archive_storage, source_size
77-
)
78-
VALUES (
79-
$1, $2, $3, $4, $5, $6, $7, $8, $9,
80-
$10, $11, $12, $13, $14, $15, $16, $17, $18,
81-
$19, $20, $21, $22, $23, $24, $25, $26
82-
)
83-
ON CONFLICT (crate_id, version) DO UPDATE
84-
SET release_time = $3,
85-
dependencies = $4,
86-
target_name = $5,
87-
yanked = $6,
88-
rustdoc_status = $7,
89-
test_status = $8,
90-
license = $9,
91-
repository_url = $10,
92-
homepage_url = $11,
93-
description = $12,
94-
description_long = $13,
95-
readme = $14,
96-
keywords = $15,
97-
have_examples = $16,
98-
downloads = $17,
99-
files = $18,
100-
doc_targets = $19,
101-
is_library = $20,
102-
documentation_url = $21,
103-
default_target = $22,
104-
features = $23,
105-
repository_id = $24,
106-
archive_storage = $25,
107-
source_size = $26
108-
RETURNING id as "id: ReleaseId" "#,
109-
crate_id.0,
110-
&metadata_pkg.version,
68+
let result = sqlx::query!(
69+
r#"UPDATE releases
70+
SET release_time = $2,
71+
dependencies = $3,
72+
target_name = $4,
73+
yanked = $5,
74+
rustdoc_status = $6,
75+
test_status = $7,
76+
license = $8,
77+
repository_url = $9,
78+
homepage_url = $10,
79+
description = $11,
80+
description_long = $12,
81+
readme = $13,
82+
keywords = $14,
83+
have_examples = $15,
84+
downloads = $16,
85+
files = $17,
86+
doc_targets = $18,
87+
is_library = $19,
88+
documentation_url = $20,
89+
default_target = $21,
90+
features = $22,
91+
repository_id = $23,
92+
archive_storage = $24,
93+
source_size = $25
94+
WHERE id = $1"#,
95+
release_id.0,
11196
registry_data.release_time,
11297
serde_json::to_value(dependencies)?,
11398
metadata_pkg.package_name(),
@@ -133,9 +118,13 @@ pub(crate) async fn add_package_into_database(
133118
archive_storage,
134119
source_size as i64,
135120
)
136-
.fetch_one(&mut *conn)
121+
.execute(&mut *conn)
137122
.await?;
138123

124+
if result.rows_affected() < 1 {
125+
return Err(anyhow!("Failed to update release"));
126+
}
127+
139128
add_keywords_into_database(conn, metadata_pkg, release_id).await?;
140129
add_compression_into_database(conn, compression_algorithms.into_iter(), release_id).await?;
141130

@@ -145,7 +134,7 @@ pub(crate) async fn add_package_into_database(
145134

146135
update_build_status(conn, release_id).await?;
147136

148-
Ok(release_id)
137+
Ok(())
149138
}
150139

151140
pub async fn update_latest_version_id(

src/db/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use sqlx::migrate::{Migrate, Migrator};
44

55
pub use self::add_package::update_latest_version_id;
66
pub(crate) use self::add_package::{
7-
add_doc_coverage, add_package_into_database, finish_build, initialize_build, initialize_crate,
7+
add_doc_coverage, finish_build, finish_release, initialize_build, initialize_crate,
88
initialize_release, update_build_with_error,
99
};
1010
pub use self::{

src/docbuilder/rustwide_builder.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
use crate::db::{
2-
add_doc_coverage, add_package_into_database, add_path_into_remote_archive, finish_build,
3-
initialize_build, initialize_crate, initialize_release, types::BuildStatus,
4-
update_build_with_error, update_crate_data_in_database, Pool,
2+
add_doc_coverage, add_path_into_remote_archive, finish_build, finish_release, initialize_build,
3+
initialize_crate, initialize_release, types::BuildStatus, update_build_with_error,
4+
update_crate_data_in_database, Pool,
55
};
66
use crate::db::{
77
file::{add_path_into_database, file_list_to_json},
88
BuildId,
99
};
10+
use crate::db::{CrateId, ReleaseId};
1011
use crate::docbuilder::Limits;
1112
use crate::error::Result;
1213
use crate::repositories::RepositoryStatsUpdater;
@@ -360,15 +361,15 @@ impl RustwideBuilder {
360361
version: &str,
361362
kind: PackageKind<'_>,
362363
) -> Result<BuildPackageSummary> {
363-
let build_id = self.runtime.block_on(async {
364+
let (crate_id, release_id, build_id) = self.runtime.block_on(async {
364365
let mut conn = self.db.get_async().await?;
365366
let crate_id = initialize_crate(&mut conn, name).await?;
366367
let release_id = initialize_release(&mut conn, crate_id, version).await?;
367368
let build_id = initialize_build(&mut conn, release_id).await?;
368-
Ok::<BuildId, Error>(build_id)
369+
Ok::<_, Error>((crate_id, release_id, build_id))
369370
})?;
370371

371-
match self.build_package_inner(name, version, kind, build_id) {
372+
match self.build_package_inner(name, version, kind, crate_id, release_id, build_id) {
372373
Ok(successful) => Ok(BuildPackageSummary {
373374
successful,
374375
should_reattempt: false,
@@ -395,6 +396,8 @@ impl RustwideBuilder {
395396
name: &str,
396397
version: &str,
397398
kind: PackageKind<'_>,
399+
crate_id: CrateId,
400+
release_id: ReleaseId,
398401
build_id: BuildId,
399402
) -> Result<bool> {
400403
info!("building package {} {}", name, version);
@@ -610,8 +613,10 @@ impl RustwideBuilder {
610613

611614
let mut async_conn = self.runtime.block_on(self.db.get_async())?;
612615

613-
let release_id = self.runtime.block_on(add_package_into_database(
616+
self.runtime.block_on(finish_release(
614617
&mut async_conn,
618+
crate_id,
619+
release_id,
615620
cargo_metadata,
616621
&build.host_source_dir(),
617622
&res.target,

src/test/fakes.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -521,8 +521,12 @@ impl<'a> FakeRelease<'a> {
521521
// non-linux platforms.
522522
let default_target = self.default_target.unwrap_or("x86_64-unknown-linux-gnu");
523523
let mut async_conn = db.async_conn().await;
524-
let release_id = crate::db::add_package_into_database(
524+
let crate_id = initialize_crate(&mut async_conn, &package.name).await?;
525+
let release_id = initialize_release(&mut async_conn, crate_id, &package.version).await?;
526+
crate::db::finish_release(
525527
&mut async_conn,
528+
crate_id,
529+
release_id,
526530
&package,
527531
crate_dir,
528532
default_target,

0 commit comments

Comments
 (0)