Skip to content

Commit 6ca4e98

Browse files
Add date alongside release version
1 parent b8e40eb commit 6ca4e98

File tree

4 files changed

+83
-12
lines changed

4 files changed

+83
-12
lines changed

src/web/crate_details.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ pub(crate) struct Release {
100100
pub is_library: Option<bool>,
101101
pub rustdoc_status: Option<bool>,
102102
pub target_name: Option<String>,
103+
pub release_time: Option<DateTime<Utc>>,
103104
}
104105

105106
impl CrateDetails {
@@ -382,6 +383,7 @@ pub(crate) async fn releases_for_crate(
382383
releases.yanked,
383384
releases.is_library,
384385
releases.rustdoc_status,
386+
releases.release_time,
385387
releases.target_name
386388
FROM releases
387389
INNER JOIN release_build_status ON releases.id = release_build_status.rid
@@ -412,6 +414,7 @@ pub(crate) async fn releases_for_crate(
412414
is_library: row.is_library,
413415
rustdoc_status: row.rustdoc_status,
414416
target_name: row.target_name,
417+
release_time: row.release_time,
415418
}))
416419
})
417420
.try_collect()
@@ -1143,7 +1146,10 @@ mod tests {
11431146
.await?;
11441147

11451148
let mut conn = db.async_conn().await;
1146-
let details = crate_details(&mut conn, "foo", "0.2.0", None).await;
1149+
let mut details = crate_details(&mut conn, "foo", "0.2.0", None).await;
1150+
for detail in &mut details.releases {
1151+
detail.release_time = None;
1152+
}
11471153

11481154
assert_eq!(
11491155
details.releases,
@@ -1156,6 +1162,7 @@ mod tests {
11561162
rustdoc_status: Some(true),
11571163
id: details.releases[0].id,
11581164
target_name: Some("foo".to_owned()),
1165+
release_time: None,
11591166
},
11601167
Release {
11611168
version: semver::Version::parse("0.12.0")?,
@@ -1165,6 +1172,7 @@ mod tests {
11651172
rustdoc_status: Some(true),
11661173
id: details.releases[1].id,
11671174
target_name: Some("foo".to_owned()),
1175+
release_time: None,
11681176
},
11691177
Release {
11701178
version: semver::Version::parse("0.3.0")?,
@@ -1174,6 +1182,7 @@ mod tests {
11741182
rustdoc_status: Some(false),
11751183
id: details.releases[2].id,
11761184
target_name: Some("foo".to_owned()),
1185+
release_time: None,
11771186
},
11781187
Release {
11791188
version: semver::Version::parse("0.2.0")?,
@@ -1183,6 +1192,7 @@ mod tests {
11831192
rustdoc_status: Some(true),
11841193
id: details.releases[3].id,
11851194
target_name: Some("foo".to_owned()),
1195+
release_time: None,
11861196
},
11871197
Release {
11881198
version: semver::Version::parse("0.2.0-alpha")?,
@@ -1192,6 +1202,7 @@ mod tests {
11921202
rustdoc_status: Some(true),
11931203
id: details.releases[4].id,
11941204
target_name: Some("foo".to_owned()),
1205+
release_time: None,
11951206
},
11961207
Release {
11971208
version: semver::Version::parse("0.1.1")?,
@@ -1201,6 +1212,7 @@ mod tests {
12011212
rustdoc_status: Some(true),
12021213
id: details.releases[5].id,
12031214
target_name: Some("foo".to_owned()),
1215+
release_time: None,
12041216
},
12051217
Release {
12061218
version: semver::Version::parse("0.1.0")?,
@@ -1210,6 +1222,7 @@ mod tests {
12101222
rustdoc_status: Some(true),
12111223
id: details.releases[6].id,
12121224
target_name: Some("foo".to_owned()),
1225+
release_time: None,
12131226
},
12141227
Release {
12151228
version: semver::Version::parse("0.0.1")?,
@@ -1219,6 +1232,7 @@ mod tests {
12191232
rustdoc_status: Some(false),
12201233
id: details.releases[7].id,
12211234
target_name: Some("foo".to_owned()),
1235+
release_time: None,
12221236
},
12231237
]
12241238
);

src/web/rustdoc.rs

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,7 @@ mod test {
954954
web::{cache::CachePolicy, encode_url_path},
955955
};
956956
use anyhow::Context;
957+
use chrono::{NaiveDate, Utc};
957958
use kuchikiki::traits::TendrilSink;
958959
use reqwest::StatusCode;
959960
use std::collections::BTreeMap;
@@ -2319,7 +2320,7 @@ mod test {
23192320
let anchor = page
23202321
.select(&selector)
23212322
.unwrap()
2322-
.find(|a| a.text_contents().trim() == version)
2323+
.find(|a| a.text_contents().trim().split(" ").next().unwrap() == version)
23232324
.unwrap();
23242325
let attributes = anchor.as_node().as_element().unwrap().attributes.borrow();
23252326
let classes = attributes.get("class").unwrap();
@@ -2333,6 +2334,59 @@ mod test {
23332334
})
23342335
}
23352336

2337+
#[test]
2338+
fn test_crate_release_version_and_date() {
2339+
async_wrapper(|env| async move {
2340+
env.fake_release()
2341+
.await
2342+
.name("hexponent")
2343+
.version("0.3.0")
2344+
.release_time(
2345+
NaiveDate::from_ymd_opt(2021, 1, 12)
2346+
.unwrap()
2347+
.and_hms_milli_opt(0, 0, 0, 0)
2348+
.unwrap()
2349+
.and_local_timezone(Utc)
2350+
.unwrap(),
2351+
)
2352+
.create()
2353+
.await?;
2354+
env.fake_release()
2355+
.await
2356+
.name("hexponent")
2357+
.version("0.2.0")
2358+
.release_time(
2359+
NaiveDate::from_ymd_opt(2020, 12, 1)
2360+
.unwrap()
2361+
.and_hms_milli_opt(0, 0, 0, 0)
2362+
.unwrap()
2363+
.and_local_timezone(Utc)
2364+
.unwrap(),
2365+
)
2366+
.create()
2367+
.await?;
2368+
let web = env.web_app().await;
2369+
2370+
let status = |version, date| {
2371+
let web = web.clone();
2372+
async move {
2373+
let page = kuchikiki::parse_html()
2374+
.one(web.get("/crate/hexponent/0.3.0").await?.text().await?);
2375+
let selector = format!(r#"ul > li a[href="/crate/hexponent/{version}"]"#);
2376+
let full = format!("{version} ({date})");
2377+
Result::<bool, anyhow::Error>::Ok(page.select(&selector).unwrap().any(|a| {
2378+
eprintln!("++++++> {:?}", a.text_contents());
2379+
a.text_contents().trim() == full
2380+
}))
2381+
}
2382+
};
2383+
2384+
assert!(status("0.3.0", "2021/01/12").await?);
2385+
assert!(status("0.2.0", "2020/12/01").await?);
2386+
Ok(())
2387+
})
2388+
}
2389+
23362390
#[test_case(true)]
23372391
#[test_case(false)]
23382392
fn test_no_trailing_rustdoc_slash(archive_storage: bool) {

templates/macros.html

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<li class="pure-menu-item">
99
<a class="pure-menu-link {% if active_tab == *expected %} pure-menu-active {% endif %}" href="{{ href }}">
1010
{# safe: allow passing in HTML #}
11-
{{ text|safe }}
11+
{{ text|safe -}}
1212
</a>
1313
</li>
1414
{% endmacro active_link %}
@@ -23,7 +23,7 @@
2323
{% macro menu_link(href, text, target) %}
2424
<li class="pure-menu-item">
2525
<a class="pure-menu-link" href="{{ href }}" {% if !target.is_empty() -%} target="{{ target }}" {%- endif %}>
26-
{{ text }}
26+
{{- text -}}
2727
</a>
2828
</li>
2929
{% endmacro menu_link %}
@@ -142,13 +142,16 @@
142142
{% if !title.is_empty() %} title="{{ title }}"{% endif %}
143143
{% if retain_fragment %}data-fragment="retain"{% endif %}
144144
>
145-
{% if warning %}
146-
{{ crate::icons::IconTriangleExclamation.render_solid(false, false, "") }}
147-
{% endif %}
148-
{% if release.build_status == "in_progress" %}
149-
{{ crate::icons::IconGear.render_solid(true, true, "") }}
150-
{% endif %}
151-
{{ release.version }}
145+
{%- if warning -%}
146+
{{ crate::icons::IconTriangleExclamation.render_solid(false, false, "") -}}
147+
{%+ endif -%}
148+
{% if release.build_status == "in_progress" -%}
149+
{{ crate::icons::IconGear.render_solid(true, true, "") -}}
150+
{%+ endif -%}
151+
<b>{{ release.version }}</b>
152+
{%- if let Some(release_time) = release.release_time -%}
153+
{# +#} ({{ release_time.format("%Y/%m/%d") }})
154+
{%- endif -%}
152155
</a>
153156
</li>
154157
{%- endfor -%}

templates/rustdoc/topbar.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
{%- if metadata.req_version.to_string() == "latest" -%}
4040
<li class="pure-menu-item">
4141
<a href="{% if permalink_path is defined %}{{permalink_path|safe}}{% endif %}" class="pure-menu-link description" id="permalink" title="Get a link to this specific version">
42-
{{ crate::icons::IconLink.render_solid(false, false, "") }} Permalink
42+
{{- crate::icons::IconLink.render_solid(false, false, "") }} Permalink
4343
</a>
4444
</li>
4545
{%- endif -%}

0 commit comments

Comments
 (0)