1
1
use crate :: schema:: { default_versions, versions} ;
2
2
use 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 } ;
6
5
7
6
/// A subset of the columns of the `versions` table.
8
7
///
@@ -57,13 +56,11 @@ impl Ord for Version {
57
56
///
58
57
/// The default version is then written to the `default_versions` table.
59
58
#[ instrument( skip( conn) ) ]
60
- pub async fn async_update_default_version (
59
+ pub async fn update_default_version (
61
60
crate_id : i32 ,
62
61
conn : & mut AsyncPgConnection ,
63
62
) -> 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 ?;
67
64
68
65
debug ! (
69
66
"Updating default version to {} (id: {})…" ,
@@ -84,49 +81,13 @@ pub async fn async_update_default_version(
84
81
Ok ( ( ) )
85
82
}
86
83
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
-
121
84
/// Verifies that the default version for the specified crate is up-to-date.
122
85
#[ instrument( skip( conn) ) ]
123
- pub async fn async_verify_default_version (
86
+ pub async fn verify_default_version (
124
87
crate_id : i32 ,
125
88
conn : & mut AsyncPgConnection ,
126
89
) -> 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 ?;
130
91
131
92
let saved = default_versions:: table
132
93
. select ( default_versions:: version_id)
@@ -154,44 +115,11 @@ pub async fn async_verify_default_version(
154
115
Ok ( ( ) )
155
116
}
156
117
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 (
190
119
crate_id : i32 ,
191
120
conn : & mut AsyncPgConnection ,
192
121
) -> QueryResult < Version > {
193
122
use diesel:: result:: Error :: NotFound ;
194
- use diesel_async:: RunQueryDsl ;
195
123
196
124
debug ! ( "Loading all versions for the crate…" ) ;
197
125
let versions = versions:: table
@@ -205,21 +133,6 @@ async fn async_calculate_default_version(
205
133
versions. into_iter ( ) . max ( ) . ok_or ( NotFound )
206
134
}
207
135
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
-
223
136
#[ cfg( test) ]
224
137
mod tests {
225
138
use super :: * ;
@@ -331,19 +244,16 @@ mod tests {
331
244
buf
332
245
}
333
246
334
- fn create_crate ( name : & str , conn : & mut impl Conn ) -> i32 {
335
- use diesel:: RunQueryDsl ;
336
-
247
+ async fn create_crate ( name : & str , conn : & mut AsyncPgConnection ) -> i32 {
337
248
diesel:: insert_into ( crates:: table)
338
249
. values ( crates:: name. eq ( name) )
339
250
. returning ( crates:: id)
340
251
. get_result ( conn)
252
+ . await
341
253
. unwrap ( )
342
254
}
343
255
344
- fn create_version ( crate_id : i32 , num : & str , conn : & mut impl Conn ) {
345
- use diesel:: RunQueryDsl ;
346
-
256
+ async fn create_version ( crate_id : i32 , num : & str , conn : & mut AsyncPgConnection ) {
347
257
diesel:: insert_into ( versions:: table)
348
258
. values ( (
349
259
versions:: crate_id. eq ( crate_id) ,
@@ -353,36 +263,36 @@ mod tests {
353
263
versions:: crate_size. eq ( 0 ) ,
354
264
) )
355
265
. execute ( conn)
266
+ . await
356
267
. unwrap ( ) ;
357
268
}
358
269
359
- fn get_default_version ( crate_id : i32 , conn : & mut impl Conn ) -> String {
360
- use diesel:: RunQueryDsl ;
361
-
270
+ async fn get_default_version ( crate_id : i32 , conn : & mut AsyncPgConnection ) -> String {
362
271
default_versions:: table
363
272
. inner_join ( versions:: table)
364
273
. select ( versions:: num)
365
274
. filter ( default_versions:: crate_id. eq ( crate_id) )
366
275
. first ( conn)
276
+ . await
367
277
. unwrap ( )
368
278
}
369
279
370
- #[ test]
371
- fn test_update_default_version ( ) {
280
+ #[ tokio :: test]
281
+ async fn test_update_default_version ( ) {
372
282
let test_db = TestDatabase :: new ( ) ;
373
- let conn = & mut test_db. connect ( ) ;
283
+ let conn = & mut test_db. async_connect ( ) . await ;
374
284
375
- let crate_id = create_crate ( "foo" , conn) ;
376
- create_version ( crate_id, "1.0.0" , conn) ;
285
+ let crate_id = create_crate ( "foo" , conn) . await ;
286
+ create_version ( crate_id, "1.0.0" , conn) . await ;
377
287
378
- update_default_version ( crate_id, conn) . unwrap ( ) ;
379
- assert_eq ! ( get_default_version( crate_id, conn) , "1.0.0" ) ;
288
+ update_default_version ( crate_id, conn) . await . unwrap ( ) ;
289
+ assert_eq ! ( get_default_version( crate_id, conn) . await , "1.0.0" ) ;
380
290
381
- create_version ( crate_id, "1.1.0" , conn) ;
382
- create_version ( crate_id, "1.0.1" , conn) ;
383
- assert_eq ! ( get_default_version( crate_id, conn) , "1.0.0" ) ;
291
+ create_version ( crate_id, "1.1.0" , conn) . await ;
292
+ create_version ( crate_id, "1.0.1" , conn) . await ;
293
+ assert_eq ! ( get_default_version( crate_id, conn) . await , "1.0.0" ) ;
384
294
385
- update_default_version ( crate_id, conn) . unwrap ( ) ;
386
- assert_eq ! ( get_default_version( crate_id, conn) , "1.1.0" ) ;
295
+ update_default_version ( crate_id, conn) . await . unwrap ( ) ;
296
+ assert_eq ! ( get_default_version( crate_id, conn) . await , "1.1.0" ) ;
387
297
}
388
298
}
0 commit comments