diff --git a/Cargo.lock b/Cargo.lock index 8526037e..4145c497 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4257,8 +4257,7 @@ checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "rustwide" version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbff90d9029841b4ff7a7242f4f4902a9d0bb915cdbf5a5c249ed0869e6ecae4" +source = "git+https://github.com/rust-lang/rustwide.git?rev=refs%2Fpull%2F103%2Fhead#9c494f3234e5168c089f3d827b82628670364ccf" dependencies = [ "anyhow", "attohttpc", diff --git a/Cargo.toml b/Cargo.toml index da16cf10..495948a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,3 +77,6 @@ zstd = "0.13.0" assert_cmd = "2.0.4" difference = "2.0.0" predicates = "3.0.4" + +[patch.crates-io] +rustwide = { git = "https://github.com/rust-lang/rustwide.git", rev = "refs/pull/103/head" } diff --git a/src/runner/test.rs b/src/runner/test.rs index 9cd104e4..a281459c 100644 --- a/src/runner/test.rs +++ b/src/runner/test.rs @@ -48,24 +48,37 @@ 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)))) - } else { - Err(err) + return Err(err.context(OverrideResult(reason))); } + + Err(err) } } }