@@ -556,13 +556,17 @@ pub fn target_redirect_handler(req: &mut Request) -> IronResult<Response> {
556
556
let base = redirect_base ( req) ;
557
557
let updater = extension ! ( req, RepositoryStatsUpdater ) ;
558
558
559
- let version_or_latest = if req. url . path ( ) . get ( 1 ) == Some ( & "latest" ) {
560
- "latest"
561
- } else {
562
- version
559
+ let release_found = match_version ( & mut conn, & name, Some ( version) ) ?;
560
+
561
+ let ( version, version_or_latest) = match release_found. version {
562
+ MatchSemver :: Exact ( ( version, _) ) => ( version. clone ( ) , version) ,
563
+ MatchSemver :: Latest ( ( version, _) ) => ( version, "latest" . to_string ( ) ) ,
564
+ // semver matching not supported here
565
+ MatchSemver :: Semver ( _) => return Err ( Nope :: VersionNotFound . into ( ) ) ,
563
566
} ;
567
+
564
568
let crate_details =
565
- match CrateDetails :: new ( & mut conn, name, version, version_or_latest, updater) {
569
+ match CrateDetails :: new ( & mut conn, name, & version, & version_or_latest, updater) {
566
570
Some ( krate) => krate,
567
571
None => return Err ( Nope :: VersionNotFound . into ( ) ) ,
568
572
} ;
@@ -589,7 +593,7 @@ pub fn target_redirect_handler(req: &mut Request) -> IronResult<Response> {
589
593
req,
590
594
storage. rustdoc_file_exists(
591
595
name,
592
- version,
596
+ & version,
593
597
& file_path. join( "/" ) ,
594
598
crate_details. archive_storage
595
599
)
@@ -1327,6 +1331,27 @@ mod test {
1327
1331
) ] ,
1328
1332
) ?;
1329
1333
1334
+ assert_platform_links (
1335
+ web,
1336
+ "/dummy/latest/dummy/" ,
1337
+ & [ ( "x86_64-unknown-linux-gnu" , "/dummy/latest/dummy/index.html" ) ] ,
1338
+ ) ?;
1339
+
1340
+ assert_platform_links (
1341
+ web,
1342
+ "/dummy/latest/dummy/index.html" ,
1343
+ & [ ( "x86_64-unknown-linux-gnu" , "/dummy/latest/dummy/index.html" ) ] ,
1344
+ ) ?;
1345
+
1346
+ assert_platform_links (
1347
+ web,
1348
+ "/dummy/latest/dummy/struct.Dummy.html" ,
1349
+ & [ (
1350
+ "x86_64-unknown-linux-gnu" ,
1351
+ "/dummy/latest/dummy/struct.Dummy.html" ,
1352
+ ) ] ,
1353
+ ) ?;
1354
+
1330
1355
// set an explicit target that requires cross-compile
1331
1356
env. fake_release ( )
1332
1357
. name ( "dummy" )
@@ -1358,6 +1383,27 @@ mod test {
1358
1383
) ] ,
1359
1384
) ?;
1360
1385
1386
+ assert_platform_links (
1387
+ web,
1388
+ "/dummy/latest/dummy/" ,
1389
+ & [ ( "x86_64-pc-windows-msvc" , "/dummy/latest/dummy/index.html" ) ] ,
1390
+ ) ?;
1391
+
1392
+ assert_platform_links (
1393
+ web,
1394
+ "/dummy/latest/dummy/index.html" ,
1395
+ & [ ( "x86_64-pc-windows-msvc" , "/dummy/latest/dummy/index.html" ) ] ,
1396
+ ) ?;
1397
+
1398
+ assert_platform_links (
1399
+ web,
1400
+ "/dummy/latest/dummy/struct.Dummy.html" ,
1401
+ & [ (
1402
+ "x86_64-pc-windows-msvc" ,
1403
+ "/dummy/latest/dummy/struct.Dummy.html" ,
1404
+ ) ] ,
1405
+ ) ?;
1406
+
1361
1407
// set an explicit target without cross-compile
1362
1408
env. fake_release ( )
1363
1409
. name ( "dummy" )
@@ -1389,6 +1435,27 @@ mod test {
1389
1435
) ] ,
1390
1436
) ?;
1391
1437
1438
+ assert_platform_links (
1439
+ web,
1440
+ "/dummy/latest/dummy/" ,
1441
+ & [ ( "x86_64-unknown-linux-gnu" , "/dummy/latest/dummy/index.html" ) ] ,
1442
+ ) ?;
1443
+
1444
+ assert_platform_links (
1445
+ web,
1446
+ "/dummy/latest/dummy/index.html" ,
1447
+ & [ ( "x86_64-unknown-linux-gnu" , "/dummy/latest/dummy/index.html" ) ] ,
1448
+ ) ?;
1449
+
1450
+ assert_platform_links (
1451
+ web,
1452
+ "/dummy/latest/dummy/struct.Dummy.html" ,
1453
+ & [ (
1454
+ "x86_64-unknown-linux-gnu" ,
1455
+ "/dummy/latest/dummy/struct.Dummy.html" ,
1456
+ ) ] ,
1457
+ ) ?;
1458
+
1392
1459
// multiple targets
1393
1460
env. fake_release ( )
1394
1461
. name ( "dummy" )
@@ -1418,6 +1485,18 @@ mod test {
1418
1485
] ,
1419
1486
) ?;
1420
1487
1488
+ assert_platform_links (
1489
+ web,
1490
+ "/dummy/latest/settings.html" ,
1491
+ & [
1492
+ (
1493
+ "x86_64-pc-windows-msvc" ,
1494
+ "/dummy/latest/x86_64-pc-windows-msvc/settings.html" ,
1495
+ ) ,
1496
+ ( "x86_64-unknown-linux-gnu" , "/dummy/latest/settings.html" ) ,
1497
+ ] ,
1498
+ ) ?;
1499
+
1421
1500
assert_platform_links (
1422
1501
web,
1423
1502
"/dummy/0.4.0/dummy/" ,
0 commit comments