Skip to content

Commit 55b586a

Browse files
GuillaumeGomezsyphar
authored andcommitted
Add date alongside release version
1 parent 3b52a42 commit 55b586a

File tree

4 files changed

+81
-10
lines changed

4 files changed

+81
-10
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
@@ -1016,6 +1016,7 @@ mod test {
10161016
web::{cache::CachePolicy, encode_url_path},
10171017
};
10181018
use anyhow::Context;
1019+
use chrono::{NaiveDate, Utc};
10191020
use kuchikiki::traits::TendrilSink;
10201021
use reqwest::StatusCode;
10211022
use std::collections::BTreeMap;
@@ -2381,7 +2382,7 @@ mod test {
23812382
let anchor = page
23822383
.select(&selector)
23832384
.unwrap()
2384-
.find(|a| a.text_contents().trim() == version)
2385+
.find(|a| a.text_contents().trim().split(" ").next().unwrap() == version)
23852386
.unwrap();
23862387
let attributes = anchor.as_node().as_element().unwrap().attributes.borrow();
23872388
let classes = attributes.get("class").unwrap();
@@ -2395,6 +2396,59 @@ mod test {
23952396
})
23962397
}
23972398

2399+
#[test]
2400+
fn test_crate_release_version_and_date() {
2401+
async_wrapper(|env| async move {
2402+
env.fake_release()
2403+
.await
2404+
.name("hexponent")
2405+
.version("0.3.0")
2406+
.release_time(
2407+
NaiveDate::from_ymd_opt(2021, 1, 12)
2408+
.unwrap()
2409+
.and_hms_milli_opt(0, 0, 0, 0)
2410+
.unwrap()
2411+
.and_local_timezone(Utc)
2412+
.unwrap(),
2413+
)
2414+
.create()
2415+
.await?;
2416+
env.fake_release()
2417+
.await
2418+
.name("hexponent")
2419+
.version("0.2.0")
2420+
.release_time(
2421+
NaiveDate::from_ymd_opt(2020, 12, 1)
2422+
.unwrap()
2423+
.and_hms_milli_opt(0, 0, 0, 0)
2424+
.unwrap()
2425+
.and_local_timezone(Utc)
2426+
.unwrap(),
2427+
)
2428+
.create()
2429+
.await?;
2430+
let web = env.web_app().await;
2431+
2432+
let status = |version, date| {
2433+
let web = web.clone();
2434+
async move {
2435+
let page = kuchikiki::parse_html()
2436+
.one(web.get("/crate/hexponent/0.3.0").await?.text().await?);
2437+
let selector = format!(r#"ul > li a[href="/crate/hexponent/{version}"]"#);
2438+
let full = format!("{version} ({date})");
2439+
Result::<bool, anyhow::Error>::Ok(page.select(&selector).unwrap().any(|a| {
2440+
eprintln!("++++++> {:?}", a.text_contents());
2441+
a.text_contents().trim() == full
2442+
}))
2443+
}
2444+
};
2445+
2446+
assert!(status("0.3.0", "2021/01/12").await?);
2447+
assert!(status("0.2.0", "2020/12/01").await?);
2448+
Ok(())
2449+
})
2450+
}
2451+
23982452
#[test_case(true)]
23992453
#[test_case(false)]
24002454
fn test_no_trailing_rustdoc_slash(archive_storage: bool) {

templates/macros.html

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,16 @@
141141
{% if !title.is_empty() %} title="{{ title }}"{% endif %}
142142
{% if retain_fragment %}data-fragment="retain"{% endif %}
143143
>
144-
{% if warning %}
145-
{{ crate::icons::IconTriangleExclamation.render_solid(false, false, "") }}
146-
{% endif %}
147-
{% if release.build_status == "in_progress" %}
148-
{{ crate::icons::IconGear.render_solid(true, true, "") }}
149-
{% endif %}
150-
{{ release.version }}
144+
{%- if warning -%}
145+
{{ crate::icons::IconTriangleExclamation.render_solid(false, false, "") -}}
146+
{%+ endif -%}
147+
{% if release.build_status == "in_progress" -%}
148+
{{ crate::icons::IconGear.render_solid(true, true, "") -}}
149+
{%+ endif -%}
150+
<b>{{ release.version }}</b>
151+
{%- if let Some(release_time) = release.release_time -%}
152+
{# +#} ({{ release_time.format("%Y/%m/%d") }})
153+
{%- endif -%}
151154
</a>
152155
</li>
153156
{%- 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)