From c42f7b6bc0533b195eb878d15b8de185e236a5f1 Mon Sep 17 00:00:00 2001 From: eth3lbert Date: Tue, 22 Oct 2024 19:23:40 +0800 Subject: [PATCH 1/2] models: Increase visibility of `default_versions` module --- src/models.rs | 2 +- src/models/default_versions.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/models.rs b/src/models.rs index f5bfb170457..08cc17b4695 100644 --- a/src/models.rs +++ b/src/models.rs @@ -20,7 +20,7 @@ pub mod helpers; mod action; pub mod category; mod crate_owner_invitation; -mod default_versions; +pub mod default_versions; pub mod dependency; mod download; mod email; diff --git a/src/models/default_versions.rs b/src/models/default_versions.rs index 5145e38c06a..a4bba9394db 100644 --- a/src/models/default_versions.rs +++ b/src/models/default_versions.rs @@ -15,11 +15,11 @@ use diesel::prelude::*; #[derive(Clone, Debug, PartialEq, Eq, Queryable, Selectable)] #[diesel(table_name = versions)] #[diesel(check_for_backend(diesel::pg::Pg))] -struct Version { - id: i32, +pub struct Version { + pub id: i32, #[diesel(deserialize_as = SemverVersion)] - num: semver::Version, - yanked: bool, + pub num: semver::Version, + pub yanked: bool, } impl Version { From a5d24b38002150ff5c15932a550b4654a7d08cea Mon Sep 17 00:00:00 2001 From: eth3lbert Date: Tue, 22 Oct 2024 16:44:36 +0800 Subject: [PATCH 2/2] controllers/krate/publish: Always upsert the default_value The value is determined by comparing the existing `default_value` to the published version. This could potentially result in upserting an outdated version. A subsequent background job is necessary to ensure correctness and eventual consistency. --- src/controllers/krate/publish.rs | 65 +++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/src/controllers/krate/publish.rs b/src/controllers/krate/publish.rs index ac105c547ec..b1fcc28cf95 100644 --- a/src/controllers/krate/publish.rs +++ b/src/controllers/krate/publish.rs @@ -23,8 +23,8 @@ use tokio::runtime::Handle; use url::Url; use crate::models::{ - insert_version_owner_action, Category, Crate, DependencyKind, Keyword, NewCrate, NewVersion, - Rights, VersionAction, + default_versions::Version as DefaultVersion, insert_version_owner_action, Category, Crate, + DependencyKind, Keyword, NewCrate, NewVersion, Rights, VersionAction, }; use crate::licenses::parse_license_expr; @@ -64,7 +64,7 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult parsed, Err(_) => { return Err(bad_request(format_args!( @@ -75,7 +75,7 @@ pub async fn publish(app: AppState, req: BytesRequest) -> AppResult AppResult AppResult