Skip to content

Commit b2b7458

Browse files
robinhundtJoshua Nelson
authored andcommitted
Display "Go to latest stable" for pre-release
closes #1044
1 parent c444b63 commit b2b7458

File tree

3 files changed

+33
-16
lines changed

3 files changed

+33
-16
lines changed

src/web/mod.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,11 +348,12 @@ fn match_version(
348348
for version in versions.iter().filter(|(_, _, yanked)| !yanked) {
349349
// in theory a crate must always have a semver compatible version,
350350
// but check result just in case
351-
let version_sem = Version::parse(&version.0).map_err(|_| {
351+
let version_sem = Version::parse(&version.0).map_err(|err| {
352352
log::error!(
353-
"invalid semver in database for crate {}: {}",
353+
"invalid semver in database for crate {}: {}. Err: {}",
354354
name,
355-
version.0
355+
version.0,
356+
err
356357
);
357358
Nope::InternalServerError
358359
})?;

src/web/rustdoc.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ struct RustdocPage {
189189
latest_version: String,
190190
inner_path: String,
191191
is_latest_version: bool,
192+
is_prerelease: bool,
192193
krate: CrateDetails,
193194
}
194195

@@ -367,6 +368,19 @@ pub fn rustdoc_html_server_handler(req: &mut Request) -> IronResult<Response> {
367368
// Get the latest version of the crate
368369
let latest_version = latest_release.version.to_string();
369370
let is_latest_version = latest_version == version;
371+
let is_prerelease = semver::Version::parse(&version)
372+
// should be impossible unless there is a semver incompatible version in the db
373+
// Note that there is a redirect earlier for semver matches to the exact version
374+
.map_err(|err| {
375+
log::error!(
376+
"invalid semver in database for crate {}: {}. Err: {}",
377+
name,
378+
&version,
379+
err
380+
);
381+
IronError::new(Nope::InternalServerError, status::InternalServerError)
382+
})?
383+
.is_prerelease();
370384

371385
// If the requested crate version is the most recent, use it to build the url
372386
let latest_path = if is_latest_version {
@@ -408,6 +422,7 @@ pub fn rustdoc_html_server_handler(req: &mut Request) -> IronResult<Response> {
408422
latest_version,
409423
inner_path,
410424
is_latest_version,
425+
is_prerelease,
411426
krate,
412427
}
413428
.into_response(&file.0.content, config.max_parse_memory, req, &path)

templates/rustdoc/header.html

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -181,23 +181,24 @@
181181
</span>
182182
</li>
183183

184-
{# If the crate isn't the latest & is yanked, display a warning and offer a link to the latest release #}
185-
{%- elif not is_latest_version and krate.yanked -%}
186-
<li class="pure-menu-item">
187-
<a href="{{ latest_path | safe }}" class="pure-menu-link warn"
188-
title="You are seeing a yanked version of {{ krate.name }} crate. Click here to go to latest version.">
189-
{{ "exclamation-triangle" | fas(fw=true) }}
190-
<span class="title"> This release has been yanked, go to latest version</span>
191-
</a>
192-
</li>
193-
194-
{# If this isn't the most recent release, offer a link to the latest #}
184+
{# If this isn't the most recent stable release, offer a link to the latest #}
195185
{%- elif not is_latest_version -%}
186+
{%- if krate.yanked -%}
187+
{%- set tooltip = "You are seeing a yanked version of the " ~ krate.name ~ "crate. Click here to go to the latest version." -%}
188+
{%- set title = "This release has been yanked, go to latest version" -%}
189+
{%- elif is_prerelease -%}
190+
{%- set tooltip = "You are seeing a pre-release version of the " ~ krate.name ~ "crate. Click here to go to the latest stable version." -%}
191+
{%- set title = "Go to latest stable release" -%}
192+
{%- else -%}
193+
{%- set tooltip = "You are seeing an outdated version of the " ~ krate.name ~ "crate. Click here to go to the latest version." -%}
194+
{%- set title = "Go to latest version" -%}
195+
{%- endif -%}
196+
196197
<li class="pure-menu-item">
197198
<a href="{{ latest_path | safe }}" class="pure-menu-link warn"
198-
title="You are seeing an outdated version of {{ krate.name }} crate. Click here to go to latest version.">
199+
title="{{ tooltip }}">
199200
{{ "exclamation-triangle" | fas(fw=true) }}
200-
<span class="title"> Go to latest version</span>
201+
<span class="title">{{ title }}</span>
201202
</a>
202203
</li>
203204
{%- endif -%}

0 commit comments

Comments
 (0)