Skip to content

Commit 536b190

Browse files
committed
models/default_version: Save num_versions value
1 parent 879c1e2 commit 536b190

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

src/models/default_versions.rs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ pub async fn update_default_version(
6060
crate_id: i32,
6161
conn: &mut AsyncPgConnection,
6262
) -> QueryResult<()> {
63-
let default_version = calculate_default_version(crate_id, conn).await?;
63+
let (default_version, num_versions) = calculate_default_version(crate_id, conn).await?;
6464

6565
debug!(
6666
"Updating default version to {} (id: {})…",
@@ -74,7 +74,10 @@ pub async fn update_default_version(
7474
))
7575
.on_conflict(default_versions::crate_id)
7676
.do_update()
77-
.set(default_versions::version_id.eq(default_version.id))
77+
.set((
78+
default_versions::version_id.eq(default_version.id),
79+
default_versions::num_versions.eq(num_versions as i32),
80+
))
7881
.execute(conn)
7982
.await?;
8083

@@ -87,22 +90,22 @@ pub async fn verify_default_version(
8790
crate_id: i32,
8891
conn: &mut AsyncPgConnection,
8992
) -> QueryResult<()> {
90-
let calculated = calculate_default_version(crate_id, conn).await?;
93+
let (calculated, num_versions) = calculate_default_version(crate_id, conn).await?;
9194

9295
let saved = default_versions::table
93-
.select(default_versions::version_id)
96+
.select((default_versions::version_id, default_versions::num_versions))
9497
.filter(default_versions::crate_id.eq(crate_id))
95-
.first::<i32>(conn)
98+
.first::<(i32, i32)>(conn)
9699
.await
97100
.optional()?;
98101

99-
if let Some(saved) = saved {
100-
if saved == calculated.id {
102+
if let Some((saved_id, saved_num_versions)) = saved {
103+
if saved_id == calculated.id && saved_num_versions == (num_versions as i32) {
101104
debug!("Default version for crate {crate_id} is up to date");
102105
} else {
103106
warn!(
104-
"Default version for crate {crate_id} is outdated (expected: {saved}, actual: {})",
105-
calculated.id,
107+
"Default version for crate {crate_id} is outdated (expected: {saved_id} with num_versions: {:?}, actual: {} with num_versions: {:?})",
108+
saved_num_versions, calculated.id, num_versions
106109
);
107110
}
108111
} else {
@@ -118,7 +121,7 @@ pub async fn verify_default_version(
118121
async fn calculate_default_version(
119122
crate_id: i32,
120123
conn: &mut AsyncPgConnection,
121-
) -> QueryResult<Version> {
124+
) -> QueryResult<(Version, usize)> {
122125
use diesel::result::Error::NotFound;
123126

124127
debug!("Loading all versions for the crate…");
@@ -128,9 +131,14 @@ async fn calculate_default_version(
128131
.load::<Version>(conn)
129132
.await?;
130133

131-
debug!("Found {} versions", versions.len());
134+
let num_versions = versions.len();
135+
debug!("Found {} versions", num_versions);
132136

133-
versions.into_iter().max().ok_or(NotFound)
137+
versions
138+
.into_iter()
139+
.max()
140+
.map(|version| (version, num_versions))
141+
.ok_or(NotFound)
134142
}
135143

136144
#[cfg(test)]

0 commit comments

Comments
 (0)