@@ -461,29 +461,21 @@ pub(crate) async fn get_all_releases(
461
461
let req_path: String = params. path . clone ( ) . unwrap_or_default ( ) ;
462
462
let req_path: Vec < & str > = req_path. split ( '/' ) . collect ( ) ;
463
463
464
- let version = match_version ( & mut conn, & params. name , & params. version )
464
+ let matched_release = match_version ( & mut conn, & params. name , & params. version )
465
465
. await ?
466
- . into_canonical_req_version_or_else ( |_| AxumNope :: VersionNotFound ) ?
467
- . into_version ( ) ;
466
+ . into_canonical_req_version_or_else ( |_| AxumNope :: VersionNotFound ) ?;
468
467
469
468
let row = sqlx:: query!(
470
469
"SELECT
471
- crates.id AS crate_id,
472
- releases.doc_targets,
473
- releases.target_name
474
- FROM crates
475
- INNER JOIN releases on crates.id = releases.crate_id
476
- WHERE crates.name = $1 and releases.version = $2;" ,
477
- params. name,
478
- & version. to_string( ) ,
470
+ releases.doc_targets
471
+ FROM releases
472
+ WHERE releases.id = $1;" ,
473
+ matched_release. id( ) ,
479
474
)
480
475
. fetch_optional ( & mut * conn)
481
476
. await ?
482
477
. ok_or ( AxumNope :: CrateNotFound ) ?;
483
478
484
- // get releases, sorted by semver
485
- let releases: Vec < Release > = releases_for_crate ( & mut conn, row. crate_id ) . await ?;
486
-
487
479
let doc_targets = MetaData :: parse_doc_targets ( row. doc_targets ) ;
488
480
489
481
let inner;
@@ -505,9 +497,9 @@ pub(crate) async fn get_all_releases(
505
497
( target, inner. trim_end_matches ( '/' ) )
506
498
} ;
507
499
let inner_path = if inner_path. is_empty ( ) {
508
- format ! ( "{}/index.html" , row . target_name)
500
+ format ! ( "{}/index.html" , matched_release . target_name( ) )
509
501
} else {
510
- format ! ( "{}/{inner_path}" , row . target_name)
502
+ format ! ( "{}/{inner_path}" , matched_release . target_name( ) )
511
503
} ;
512
504
513
505
let target = if target. is_empty ( ) {
@@ -517,7 +509,7 @@ pub(crate) async fn get_all_releases(
517
509
} ;
518
510
519
511
let res = ReleaseList {
520
- releases,
512
+ releases : matched_release . all_releases ,
521
513
target,
522
514
inner_path,
523
515
crate_name : params. name ,
@@ -556,7 +548,7 @@ pub(crate) async fn get_all_platforms_inner(
556
548
let req_path: String = params. path . unwrap_or_default ( ) ;
557
549
let req_path: Vec < & str > = req_path. split ( '/' ) . collect ( ) ;
558
550
559
- let version = match_version ( & mut conn, & params. name , & params. version )
551
+ let matched_release = match_version ( & mut conn, & params. name , & params. version )
560
552
. await ?
561
553
. into_exactly_named_or_else ( |corrected_name, req_version| {
562
554
AxumNope :: Redirect (
@@ -579,33 +571,24 @@ pub(crate) async fn get_all_platforms_inner(
579
571
) ) ,
580
572
CachePolicy :: ForeverInCdn ,
581
573
)
582
- } ) ?
583
- . into_version ( ) ;
574
+ } ) ?;
584
575
585
576
let krate = sqlx:: query!(
586
577
"SELECT
587
- crates.id,
588
- crates.name,
589
578
releases.default_target,
590
579
releases.doc_targets
591
580
FROM releases
592
- INNER JOIN crates ON releases.crate_id = crates.id
593
- WHERE crates.name = $1 AND releases.version = $2;" ,
594
- params. name,
595
- version. to_string( ) ,
581
+ WHERE releases.id = $1;" ,
582
+ matched_release. id( ) ,
596
583
)
597
584
. fetch_optional ( & mut * conn)
598
585
. await ?
599
586
. ok_or ( AxumNope :: CrateNotFound ) ?;
600
587
601
- let releases = releases_for_crate ( & mut conn, krate. id ) . await ?;
602
-
603
588
let doc_targets = MetaData :: parse_doc_targets ( krate. doc_targets ) ;
604
589
605
- let latest_release = releases
606
- . iter ( )
607
- . find ( |release| release. version . pre . is_empty ( ) && !release. yanked )
608
- . unwrap_or ( & releases[ 0 ] ) ;
590
+ let latest_release = latest_release ( & matched_release. all_releases )
591
+ . expect ( "we couldn't end up here without releases" ) ;
609
592
610
593
// The path within this crate version's rustdoc output
611
594
let inner;
@@ -627,9 +610,9 @@ pub(crate) async fn get_all_platforms_inner(
627
610
( target, inner. trim_end_matches ( '/' ) )
628
611
} ;
629
612
let inner_path = if inner_path. is_empty ( ) {
630
- format ! ( "{}/index.html" , krate . name )
613
+ format ! ( "{}/index.html" , matched_release . target_name ( ) )
631
614
} else {
632
- format ! ( "{}/{inner_path}" , krate . name )
615
+ format ! ( "{}/{inner_path}" , matched_release . target_name ( ) )
633
616
} ;
634
617
635
618
let current_target = if latest_release. build_status {
@@ -644,8 +627,8 @@ pub(crate) async fn get_all_platforms_inner(
644
627
645
628
let res = PlatformList {
646
629
metadata : ShortMetadata {
647
- name : krate . name ,
648
- version : version. clone ( ) ,
630
+ name : params . name ,
631
+ version : matched_release . version ( ) . clone ( ) ,
649
632
req_version : params. version . clone ( ) ,
650
633
doc_targets,
651
634
} ,
0 commit comments