Skip to content

Commit f144148

Browse files
committed
don't show in progress items in build queue
1 parent 41d5e31 commit f144148

File tree

1 file changed

+72
-12
lines changed

1 file changed

+72
-12
lines changed

src/web/releases.rs

Lines changed: 72 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -806,14 +806,6 @@ pub(crate) async fn build_queue_handler(
806806
// reverse the list, so the oldest comes first
807807
active_cdn_deployments.reverse();
808808

809-
let mut queue = spawn_blocking(move || build_queue.queued_crates()).await?;
810-
for krate in queue.iter_mut() {
811-
// The priority here is inverted: in the database if a crate has a higher priority it
812-
// will be built after everything else, which is counter-intuitive for people not
813-
// familiar with docs.rs's inner workings.
814-
krate.priority = -krate.priority;
815-
}
816-
817809
let in_progress_builds: Vec<(String, String)> = sqlx::query!(
818810
r#"SELECT
819811
crates.name,
@@ -831,6 +823,28 @@ pub(crate) async fn build_queue_handler(
831823
.map(|rec| (rec.name, rec.version))
832824
.collect();
833825

826+
let queue: Vec<QueuedCrate> = spawn_blocking(move || build_queue.queued_crates())
827+
.await?
828+
.into_iter()
829+
.filter(|krate| {
830+
// use a loop instead of `.contains` to avoid cloning name& version for the match
831+
for (name, version) in &in_progress_builds {
832+
if *name == krate.name && *version == krate.version {
833+
return false;
834+
}
835+
}
836+
return true;
837+
})
838+
.map(|mut krate| {
839+
// The priority here is inverted: in the database if a crate has a higher priority it
840+
// will be built after everything else, which is counter-intuitive for people not
841+
// familiar with docs.rs's inner workings.
842+
krate.priority = -krate.priority;
843+
844+
krate
845+
})
846+
.collect();
847+
834848
Ok(BuildQueuePage {
835849
description: "crate documentation scheduled to build & deploy",
836850
queue,
@@ -1710,14 +1724,13 @@ mod tests {
17101724
cdn::queue_crate_invalidation(&mut conn, &env.config(), "krate_2").await
17111725
})?;
17121726

1713-
let empty = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1714-
assert!(empty
1727+
let content = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1728+
assert!(content
17151729
.select(".release > div > strong")
17161730
.expect("missing heading")
17171731
.any(|el| el.text_contents().contains("active CDN deployments")));
17181732

1719-
let full = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1720-
let items = full
1733+
let items = content
17211734
.select(".queue-list > li")
17221735
.expect("missing list items")
17231736
.collect::<Vec<_>>();
@@ -1780,6 +1793,53 @@ mod tests {
17801793
});
17811794
}
17821795

1796+
#[test]
1797+
fn test_releases_queue_in_progress() {
1798+
wrapper(|env| {
1799+
let web = env.frontend();
1800+
1801+
// we have two queued releases, where the build for one is already in progress
1802+
let queue = env.build_queue();
1803+
queue.add_crate("foo", "1.0.0", 0, None)?;
1804+
queue.add_crate("bar", "0.1.0", 0, None)?;
1805+
1806+
env.fake_release()
1807+
.name("foo")
1808+
.version("1.0.0")
1809+
.builds(vec![FakeBuild::default()
1810+
.build_status(BuildStatus::InProgress)
1811+
.rustc_version("rustc (blabla 2022-01-01)")
1812+
.docsrs_version("docs.rs 4.0.0")])
1813+
.create()?;
1814+
1815+
let full = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1816+
1817+
let lists = full
1818+
.select(".queue-list")
1819+
.expect("missing queues")
1820+
.collect::<Vec<_>>();
1821+
assert_eq!(lists.len(), 2);
1822+
1823+
let in_progress_items: Vec<_> = lists[0]
1824+
.as_node()
1825+
.select("li > a")
1826+
.expect("missing in progress list items")
1827+
.map(|node| node.text_contents().trim().to_string())
1828+
.collect();
1829+
assert_eq!(in_progress_items, vec!["foo 1.0.0"]);
1830+
1831+
let queued_items: Vec<_> = lists[1]
1832+
.as_node()
1833+
.select("li > a")
1834+
.expect("missing queued list items")
1835+
.map(|node| node.text_contents().trim().to_string())
1836+
.collect();
1837+
assert_eq!(queued_items, vec!["bar 0.1.0"]);
1838+
1839+
Ok(())
1840+
});
1841+
}
1842+
17831843
#[test]
17841844
fn home_page_links() {
17851845
wrapper(|env| {

0 commit comments

Comments
 (0)