Skip to content

Commit a6ac91c

Browse files
committed
Fix "latest" support for target redirect
1 parent 04897ce commit a6ac91c

File tree

1 file changed

+85
-6
lines changed

1 file changed

+85
-6
lines changed

src/web/rustdoc.rs

Lines changed: 85 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -556,13 +556,17 @@ pub fn target_redirect_handler(req: &mut Request) -> IronResult<Response> {
556556
let base = redirect_base(req);
557557
let updater = extension!(req, RepositoryStatsUpdater);
558558

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()),
563566
};
567+
564568
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) {
566570
Some(krate) => krate,
567571
None => return Err(Nope::VersionNotFound.into()),
568572
};
@@ -589,7 +593,7 @@ pub fn target_redirect_handler(req: &mut Request) -> IronResult<Response> {
589593
req,
590594
storage.rustdoc_file_exists(
591595
name,
592-
version,
596+
&version,
593597
&file_path.join("/"),
594598
crate_details.archive_storage
595599
)
@@ -1327,6 +1331,27 @@ mod test {
13271331
)],
13281332
)?;
13291333

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+
13301355
// set an explicit target that requires cross-compile
13311356
env.fake_release()
13321357
.name("dummy")
@@ -1358,6 +1383,27 @@ mod test {
13581383
)],
13591384
)?;
13601385

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+
13611407
// set an explicit target without cross-compile
13621408
env.fake_release()
13631409
.name("dummy")
@@ -1389,6 +1435,27 @@ mod test {
13891435
)],
13901436
)?;
13911437

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+
13921459
// multiple targets
13931460
env.fake_release()
13941461
.name("dummy")
@@ -1418,6 +1485,18 @@ mod test {
14181485
],
14191486
)?;
14201487

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+
14211500
assert_platform_links(
14221501
web,
14231502
"/dummy/0.4.0/dummy/",

0 commit comments

Comments
 (0)