@@ -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(
118121async 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