Skip to content

Commit 302b4c4

Browse files
committed
don't show in progress items in build queue
1 parent 6c890e2 commit 302b4c4

File tree

1 file changed

+70
-12
lines changed

1 file changed

+70
-12
lines changed

src/web/releases.rs

Lines changed: 70 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 = 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,26 @@ pub(crate) async fn build_queue_handler(
831823
.map(|rec| (rec.name, rec.version))
832824
.collect();
833825

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

1713-
let empty = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1714-
assert!(empty
1725+
let content = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1726+
assert!(content
17151727
.select(".release > div > strong")
17161728
.expect("missing heading")
17171729
.any(|el| el.text_contents().contains("active CDN deployments")));
17181730

1719-
let full = kuchikiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
1720-
let items = full
1731+
let items = content
17211732
.select(".queue-list > li")
17221733
.expect("missing list items")
17231734
.collect::<Vec<_>>();
@@ -1780,6 +1791,53 @@ mod tests {
17801791
});
17811792
}
17821793

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

0 commit comments

Comments
 (0)