11use super :: { match_version, redirect_base, render_markdown, MatchSemver , MetaData } ;
2- use crate :: utils:: get_correct_docsrs_style_file;
2+ use crate :: utils:: { get_correct_docsrs_style_file, report_error } ;
33use crate :: { db:: Pool , impl_webpage, repositories:: RepositoryStatsUpdater , web:: page:: WebPage } ;
4+ use anyhow:: anyhow;
45use chrono:: { DateTime , Utc } ;
56use iron:: prelude:: * ;
67use iron:: Url ;
@@ -74,6 +75,7 @@ pub struct Release {
7475 pub build_status : bool ,
7576 pub yanked : bool ,
7677 pub is_library : bool ,
78+ pub rustdoc_status : bool ,
7779}
7880
7981impl CrateDetails {
@@ -232,12 +234,13 @@ impl CrateDetails {
232234 pub fn latest_release ( & self ) -> & Release {
233235 self . releases
234236 . iter ( )
235- . find ( |release| ! release. version . is_prerelease ( ) && !release. yanked )
237+ . find ( |release| release. version . pre . is_empty ( ) && !release. yanked )
236238 . unwrap_or ( & self . releases [ 0 ] )
237239 }
238240}
239241
240- fn releases_for_crate (
242+ /// Return all releases for a crate, sorted in descending order by semver
243+ pub ( crate ) fn releases_for_crate (
241244 conn : & mut impl GenericClient ,
242245 crate_id : i32 ,
243246) -> Result < Vec < Release > , anyhow:: Error > {
@@ -248,7 +251,8 @@ fn releases_for_crate(
248251 version,
249252 build_status,
250253 yanked,
251- is_library
254+ is_library,
255+ rustdoc_status
252256 FROM releases
253257 WHERE
254258 releases.crate_id = $1" ,
@@ -257,15 +261,23 @@ fn releases_for_crate(
257261 . into_iter ( )
258262 . filter_map ( |row| {
259263 let version: String = row. get ( "version" ) ;
260- semver:: Version :: parse ( & version)
261- . map ( | semversion| Release {
264+ match semver:: Version :: parse ( & version) {
265+ Ok ( semversion) => Some ( Release {
262266 id : row. get ( "id" ) ,
263267 version : semversion,
264268 build_status : row. get ( "build_status" ) ,
265269 yanked : row. get ( "yanked" ) ,
266270 is_library : row. get ( "is_library" ) ,
267- } )
268- . ok ( )
271+ rustdoc_status : row. get ( "rustdoc_status" ) ,
272+ } ) ,
273+ Err ( err) => {
274+ report_error ( & anyhow ! ( err) . context ( format ! (
275+ "invalid semver in database for crate {}: {}" ,
276+ crate_id, version
277+ ) ) ) ;
278+ None
279+ }
280+ }
269281 } )
270282 . collect ( ) ;
271283
@@ -491,55 +503,63 @@ mod tests {
491503 build_status: true ,
492504 yanked: false ,
493505 is_library: true ,
506+ rustdoc_status: true ,
494507 id: details. releases[ 0 ] . id,
495508 } ,
496509 Release {
497510 version: semver:: Version :: parse( "0.12.0" ) ?,
498511 build_status: true ,
499512 yanked: false ,
500513 is_library: true ,
514+ rustdoc_status: true ,
501515 id: details. releases[ 1 ] . id,
502516 } ,
503517 Release {
504518 version: semver:: Version :: parse( "0.3.0" ) ?,
505519 build_status: false ,
506520 yanked: false ,
507521 is_library: true ,
522+ rustdoc_status: false ,
508523 id: details. releases[ 2 ] . id,
509524 } ,
510525 Release {
511526 version: semver:: Version :: parse( "0.2.0" ) ?,
512527 build_status: true ,
513528 yanked: true ,
514529 is_library: true ,
530+ rustdoc_status: true ,
515531 id: details. releases[ 3 ] . id,
516532 } ,
517533 Release {
518534 version: semver:: Version :: parse( "0.2.0-alpha" ) ?,
519535 build_status: true ,
520536 yanked: false ,
521537 is_library: true ,
538+ rustdoc_status: true ,
522539 id: details. releases[ 4 ] . id,
523540 } ,
524541 Release {
525542 version: semver:: Version :: parse( "0.1.1" ) ?,
526543 build_status: true ,
527544 yanked: false ,
528545 is_library: true ,
546+ rustdoc_status: true ,
529547 id: details. releases[ 5 ] . id,
530548 } ,
531549 Release {
532550 version: semver:: Version :: parse( "0.1.0" ) ?,
533551 build_status: true ,
534552 yanked: false ,
535553 is_library: true ,
554+ rustdoc_status: true ,
536555 id: details. releases[ 6 ] . id,
537556 } ,
538557 Release {
539558 version: semver:: Version :: parse( "0.0.1" ) ?,
540559 build_status: false ,
541560 yanked: false ,
542561 is_library: false ,
562+ rustdoc_status: false ,
543563 id: details. releases[ 7 ] . id,
544564 } ,
545565 ]
0 commit comments