11use crate :: schema:: { default_versions, versions} ;
22use crate :: sql:: SemverVersion ;
3- use crate :: util:: diesel:: prelude:: * ;
4- use crate :: util:: diesel:: Conn ;
5- use diesel_async:: AsyncPgConnection ;
3+ use diesel:: prelude:: * ;
4+ use diesel_async:: { AsyncPgConnection , RunQueryDsl } ;
65
76/// A subset of the columns of the `versions` table.
87///
@@ -57,13 +56,11 @@ impl Ord for Version {
5756///
5857/// The default version is then written to the `default_versions` table.
5958#[ instrument( skip( conn) ) ]
60- pub async fn async_update_default_version (
59+ pub async fn update_default_version (
6160 crate_id : i32 ,
6261 conn : & mut AsyncPgConnection ,
6362) -> QueryResult < ( ) > {
64- use diesel_async:: RunQueryDsl ;
65-
66- let default_version = async_calculate_default_version ( crate_id, conn) . await ?;
63+ let default_version = calculate_default_version ( crate_id, conn) . await ?;
6764
6865 debug ! (
6966 "Updating default version to {} (id: {})…" ,
@@ -84,49 +81,13 @@ pub async fn async_update_default_version(
8481 Ok ( ( ) )
8582}
8683
87- /// Updates the `default_versions` table entry for the specified crate.
88- ///
89- /// This function first loads all versions of the crate from the database,
90- /// then determines the default version based on the following criteria:
91- ///
92- /// 1. The highest non-prerelease version that is not yanked.
93- /// 2. The highest non-yanked version.
94- /// 3. The highest version.
95- ///
96- /// The default version is then written to the `default_versions` table.
97- #[ instrument( skip( conn) ) ]
98- pub fn update_default_version ( crate_id : i32 , conn : & mut impl Conn ) -> QueryResult < ( ) > {
99- use diesel:: RunQueryDsl ;
100-
101- let default_version = calculate_default_version ( crate_id, conn) ?;
102-
103- debug ! (
104- "Updating default version to {} (id: {})…" ,
105- default_version. num, default_version. id
106- ) ;
107-
108- diesel:: insert_into ( default_versions:: table)
109- . values ( (
110- default_versions:: crate_id. eq ( crate_id) ,
111- default_versions:: version_id. eq ( default_version. id ) ,
112- ) )
113- . on_conflict ( default_versions:: crate_id)
114- . do_update ( )
115- . set ( default_versions:: version_id. eq ( default_version. id ) )
116- . execute ( conn) ?;
117-
118- Ok ( ( ) )
119- }
120-
12184/// Verifies that the default version for the specified crate is up-to-date.
12285#[ instrument( skip( conn) ) ]
123- pub async fn async_verify_default_version (
86+ pub async fn verify_default_version (
12487 crate_id : i32 ,
12588 conn : & mut AsyncPgConnection ,
12689) -> QueryResult < ( ) > {
127- use diesel_async:: RunQueryDsl ;
128-
129- let calculated = async_calculate_default_version ( crate_id, conn) . await ?;
90+ let calculated = calculate_default_version ( crate_id, conn) . await ?;
13091
13192 let saved = default_versions:: table
13293 . select ( default_versions:: version_id)
@@ -154,44 +115,11 @@ pub async fn async_verify_default_version(
154115 Ok ( ( ) )
155116}
156117
157- /// Verifies that the default version for the specified crate is up-to-date.
158- #[ instrument( skip( conn) ) ]
159- pub fn verify_default_version ( crate_id : i32 , conn : & mut impl Conn ) -> QueryResult < ( ) > {
160- use diesel:: RunQueryDsl ;
161-
162- let calculated = calculate_default_version ( crate_id, conn) ?;
163-
164- let saved = default_versions:: table
165- . select ( default_versions:: version_id)
166- . filter ( default_versions:: crate_id. eq ( crate_id) )
167- . first :: < i32 > ( conn)
168- . optional ( ) ?;
169-
170- if let Some ( saved) = saved {
171- if saved == calculated. id {
172- debug ! ( "Default version for crate {crate_id} is up to date" ) ;
173- } else {
174- warn ! (
175- "Default version for crate {crate_id} is outdated (expected: {saved}, actual: {})" ,
176- calculated. id,
177- ) ;
178- }
179- } else {
180- warn ! (
181- "Default version for crate {crate_id} is missing (expected: {})" ,
182- calculated. id
183- ) ;
184- }
185-
186- Ok ( ( ) )
187- }
188-
189- async fn async_calculate_default_version (
118+ async fn calculate_default_version (
190119 crate_id : i32 ,
191120 conn : & mut AsyncPgConnection ,
192121) -> QueryResult < Version > {
193122 use diesel:: result:: Error :: NotFound ;
194- use diesel_async:: RunQueryDsl ;
195123
196124 debug ! ( "Loading all versions for the crate…" ) ;
197125 let versions = versions:: table
@@ -205,21 +133,6 @@ async fn async_calculate_default_version(
205133 versions. into_iter ( ) . max ( ) . ok_or ( NotFound )
206134}
207135
208- fn calculate_default_version ( crate_id : i32 , conn : & mut impl Conn ) -> QueryResult < Version > {
209- use diesel:: result:: Error :: NotFound ;
210- use diesel:: RunQueryDsl ;
211-
212- debug ! ( "Loading all versions for the crate…" ) ;
213- let versions = versions:: table
214- . filter ( versions:: crate_id. eq ( crate_id) )
215- . select ( Version :: as_returning ( ) )
216- . load :: < Version > ( conn) ?;
217-
218- debug ! ( "Found {} versions" , versions. len( ) ) ;
219-
220- versions. into_iter ( ) . max ( ) . ok_or ( NotFound )
221- }
222-
223136#[ cfg( test) ]
224137mod tests {
225138 use super :: * ;
@@ -332,8 +245,6 @@ mod tests {
332245 }
333246
334247 async fn create_crate ( name : & str , conn : & mut AsyncPgConnection ) -> i32 {
335- use diesel_async:: RunQueryDsl ;
336-
337248 diesel:: insert_into ( crates:: table)
338249 . values ( crates:: name. eq ( name) )
339250 . returning ( crates:: id)
@@ -343,8 +254,6 @@ mod tests {
343254 }
344255
345256 async fn create_version ( crate_id : i32 , num : & str , conn : & mut AsyncPgConnection ) {
346- use diesel_async:: RunQueryDsl ;
347-
348257 diesel:: insert_into ( versions:: table)
349258 . values ( (
350259 versions:: crate_id. eq ( crate_id) ,
@@ -359,8 +268,6 @@ mod tests {
359268 }
360269
361270 async fn get_default_version ( crate_id : i32 , conn : & mut AsyncPgConnection ) -> String {
362- use diesel_async:: RunQueryDsl ;
363-
364271 default_versions:: table
365272 . inner_join ( versions:: table)
366273 . select ( versions:: num)
@@ -378,14 +285,14 @@ mod tests {
378285 let crate_id = create_crate ( "foo" , conn) . await ;
379286 create_version ( crate_id, "1.0.0" , conn) . await ;
380287
381- async_update_default_version ( crate_id, conn) . await . unwrap ( ) ;
288+ update_default_version ( crate_id, conn) . await . unwrap ( ) ;
382289 assert_eq ! ( get_default_version( crate_id, conn) . await , "1.0.0" ) ;
383290
384291 create_version ( crate_id, "1.1.0" , conn) . await ;
385292 create_version ( crate_id, "1.0.1" , conn) . await ;
386293 assert_eq ! ( get_default_version( crate_id, conn) . await , "1.0.0" ) ;
387294
388- async_update_default_version ( crate_id, conn) . await . unwrap ( ) ;
295+ update_default_version ( crate_id, conn) . await . unwrap ( ) ;
389296 assert_eq ! ( get_default_version( crate_id, conn) . await , "1.1.0" ) ;
390297 }
391298}
0 commit comments