diff --git a/src/build.rs b/src/build.rs index 32fa1e1..7317e2b 100644 --- a/src/build.rs +++ b/src/build.rs @@ -15,7 +15,7 @@ use tracing::{debug, error, info}; use crate::{ db::{BuildMode, Db, FullBuildInfo, Status}, - nightlies::{Nightlies, NightlyCache}, + nightlies::Nightlies, }; pub struct Toolchain(String); @@ -36,16 +36,15 @@ impl Display for Toolchain { } pub async fn background_builder(db: Db) -> Result<()> { - let mut nightly_cache = NightlyCache::default(); loop { - if let Err(err) = background_builder_inner(&db, &mut nightly_cache).await { + if let Err(err) = background_builder_inner(&db).await { error!("error in background builder: {err}"); } } } -async fn background_builder_inner(db: &Db, nightly_cache: &mut NightlyCache) -> Result<()> { - let nightlies = Nightlies::fetch(nightly_cache) +async fn background_builder_inner(db: &Db) -> Result<()> { + let nightlies = Nightlies::fetch() .await .wrap_err("fetching nightlies")?; let already_finished = db diff --git a/src/nightlies.rs b/src/nightlies.rs index f6675dd..aecffd3 100644 --- a/src/nightlies.rs +++ b/src/nightlies.rs @@ -1,29 +1,21 @@ use std::collections::HashSet; use std::hash::RandomState; -use color_eyre::eyre::{Context, OptionExt}; +use color_eyre::eyre::Context; use color_eyre::Result; -use reqwest::StatusCode; -use time::Duration; use tracing::debug; use crate::db::{BuildMode, FinishedNightly}; const EARLIEST_CUTOFF_DATE: &str = "2022-01-01"; -#[derive(Default)] -pub struct NightlyCache { - /// Nightlies that exist. - exists: HashSet, -} - /// All nightlies that exist. pub struct Nightlies { all: Vec, } impl Nightlies { - pub async fn fetch(cache: &mut NightlyCache) -> Result { + pub async fn fetch() -> Result { let manifests = reqwest::get("https://static.rust-lang.org/manifests.txt") .await .wrap_err("fetching https://static.rust-lang.org/manifests.txt")? @@ -36,22 +28,6 @@ impl Nightlies { .collect::>(); all.sort(); - - // The manifests is only updated weekly, which means new nightlies won't be contained. - // We probe for their existence. - let latest = all - .last() - .ok_or_eyre("did not find any nightlies in manifests.txt")?; - - for nightly in guess_more_recent_nightlies(latest)? { - if nightly_exists(&nightly, cache) - .await - .wrap_err_with(|| format!("checking whether {nightly} exists"))? - { - all.push(nightly); - } - } - all.reverse(); debug!( @@ -92,31 +68,6 @@ fn nightlies_from_manifest(manifest: &str) -> Vec { .collect() } -fn guess_more_recent_nightlies(latest: &str) -> Result> { - let format = time::macros::format_description!("[year]-[month]-[day]"); - let latest = time::Date::parse(latest, format).wrap_err("latest nightly has invalid format")?; - - // manifests.txt is updated weekly, so let's try 8 just in case. - Ok((1..=8) - .filter_map(|offset| latest.checked_add(Duration::days(offset))) - .map(|date| date.format(format).unwrap()) - .collect()) -} - -async fn nightly_exists(nightly: &str, cache: &mut NightlyCache) -> Result { - if cache.exists.contains(nightly) { - return Ok(true); - } - let url = format!("https://static.rust-lang.org/dist/{nightly}/channel-rust-nightly.toml"); - let resp = reqwest::get(&url).await.wrap_err("fetching channel")?; - debug!(%nightly, %url, status = %resp.status(), "Checked whether a recent nightly exists"); - let exists = resp.status() == StatusCode::OK; - if exists { - cache.exists.insert(nightly.to_owned()); - } - Ok(exists) -} - #[cfg(test)] mod tests { #[test] @@ -129,22 +80,4 @@ static.rust-lang.org/dist/2024-08-23/channel-rust-nightly.toml"; let nightlies = super::nightlies_from_manifest(&test_manifest); assert_eq!(nightlies, vec!["2024-08-22", "2024-08-23"]); } - - #[test] - fn guess() { - let nightlies = super::guess_more_recent_nightlies("2024-08-28").unwrap(); - assert_eq!( - nightlies, - [ - "2024-08-29", - "2024-08-30", - "2024-08-31", - "2024-09-01", - "2024-09-02", - "2024-09-03", - "2024-09-04", - "2024-09-05", - ] - ); - } }