diff --git a/Cargo.lock b/Cargo.lock index 2f59cce3..ba6e0a42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4253,9 +4253,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustwide" -version = "0.19.4" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbff90d9029841b4ff7a7242f4f4902a9d0bb915cdbf5a5c249ed0869e6ecae4" +checksum = "05aac919e3ffc2a8cc6767a72276e4214fbaf00b1675ff7e5bc2fe21e90539d8" dependencies = [ "anyhow", "attohttpc", diff --git a/Cargo.toml b/Cargo.toml index 5051ac28..52844afe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,7 +50,7 @@ remove_dir_all = "0.7" reqwest = { version = "0.12", features = ["blocking", "json"] } rusqlite = { version = "0.32.1", features = ["chrono", "functions", "bundled"] } rust_team_data = { git = "https://github.com/rust-lang/team" } -rustwide = { version = "0.19.3", features = [ +rustwide = { version = "0.20.0", features = [ "unstable", "unstable-toolchain-ci", ] } diff --git a/src/runner/test.rs b/src/runner/test.rs index 9cd104e4..d7c3f4b0 100644 --- a/src/runner/test.rs +++ b/src/runner/test.rs @@ -48,21 +48,34 @@ pub(super) fn detect_broken(res: Result) -> Result { match res { Ok(ok) => Ok(ok), Err(err) => { - let mut reason = None; - if let Some(error) = err.downcast_ref() { - reason = match *error { - PrepareError::MissingCargoToml => Some(BrokenReason::CargoToml), - PrepareError::InvalidCargoTomlSyntax => Some(BrokenReason::CargoToml), - PrepareError::YankedDependencies(_) => Some(BrokenReason::Yanked), - PrepareError::MissingDependencies(_) => Some(BrokenReason::MissingDependencies), - PrepareError::PrivateGitRepository => Some(BrokenReason::MissingGitRepository), - _ => None, - } - } + let reason = match *error { + PrepareError::MissingCargoToml => { + TestResult::BrokenCrate(BrokenReason::CargoToml) + } + PrepareError::InvalidCargoTomlSyntax => { + TestResult::BrokenCrate(BrokenReason::CargoToml) + } + PrepareError::YankedDependencies(_) => { + TestResult::BrokenCrate(BrokenReason::Yanked) + } + PrepareError::MissingDependencies(_) => { + TestResult::BrokenCrate(BrokenReason::MissingDependencies) + } + PrepareError::PrivateGitRepository => { + TestResult::BrokenCrate(BrokenReason::MissingGitRepository) + } + _ => { + let reason = failure_reason(&err); + if reason.is_spurious() || matches!(reason, FailureReason::Unknown) { + TestResult::PrepareFail(reason) + } else { + TestResult::BrokenCrate(BrokenReason::Unknown) + } + } + }; - if let Some(reason) = reason { - Err(err.context(OverrideResult(TestResult::BrokenCrate(reason)))) + Err(err.context(OverrideResult(reason))) } else { Err(err) }