Skip to content

Commit ec7f45e

Browse files
committed
seperate prepare failure from broken/errored crate
Prepare failure are likely spurious and as such are included in the retry-regressed-list.txt to give the crates another change in a retry. This is different to a crate being Broken which is probably non-spurious. Iif either base or test toolchain is a prepare failure the runs can't give any insight as we are missing either a base or a test result.
1 parent f352961 commit ec7f45e

File tree

5 files changed

+31
-18
lines changed

5 files changed

+31
-18
lines changed

src/report/display.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ impl ResultName for TestResult {
5858
fn short_name(&self) -> String {
5959
match self {
6060
TestResult::BrokenCrate(reason) => reason.short_name(),
61+
TestResult::PrepareFail(reason) => format!("prepare {}", reason.short_name()),
6162
TestResult::BuildFail(reason) => format!("build {}", reason.short_name()),
6263
TestResult::TestFail(reason) => format!("test {}", reason.short_name()),
6364
TestResult::TestSkipped => "test skipped".into(),
@@ -69,6 +70,7 @@ impl ResultName for TestResult {
6970

7071
fn long_name(&self) -> String {
7172
match self {
73+
TestResult::PrepareFail(reason) => format!("prepare {}", reason.long_name()),
7274
TestResult::BuildFail(reason) => format!("build {}", reason.long_name()),
7375
TestResult::TestFail(reason) => format!("test {}", reason.long_name()),
7476
TestResult::BrokenCrate(reason) => reason.long_name(),
@@ -103,6 +105,7 @@ impl ResultColor for Comparison {
103105
Comparison::SameTestPass => Color::Single("#72a156"),
104106
Comparison::Error => Color::Single("#d77026"),
105107
Comparison::Broken => Color::Single("#44176e"),
108+
Comparison::PrepareFail => Color::Striped("#44176e", "#d77026"),
106109
Comparison::SpuriousRegressed => Color::Striped("#db3026", "#d5433b"),
107110
Comparison::SpuriousFixed => Color::Striped("#5630db", "#5d3dcf"),
108111
}
@@ -117,6 +120,7 @@ impl ResultColor for TestResult {
117120
TestResult::TestFail(_) => Color::Single("#65461e"),
118121
TestResult::TestSkipped | TestResult::TestPass => Color::Single("#62a156"),
119122
TestResult::Error => Color::Single("#d77026"),
123+
TestResult::PrepareFail(_) => Color::Striped("#44176e", "#d77026"),
120124
TestResult::Skipped => Color::Single("#494b4a"),
121125
}
122126
}

src/report/mod.rs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ string_enum!(pub enum Comparison {
7171
Unknown => "unknown",
7272
Error => "error",
7373
Broken => "broken",
74+
PrepareFail => "prepare-fail",
7475
SameBuildFail => "build-fail",
7576
SameTestFail => "test-fail",
7677
SameTestSkipped => "test-skipped",
@@ -87,7 +88,8 @@ impl Comparison {
8788
| Comparison::Unknown
8889
| Comparison::Error
8990
| Comparison::SpuriousRegressed
90-
| Comparison::SpuriousFixed => true,
91+
| Comparison::SpuriousFixed
92+
| Comparison::PrepareFail => true,
9193
Comparison::Skipped
9294
| Comparison::Broken
9395
| Comparison::SameBuildFail
@@ -107,6 +109,7 @@ impl Comparison {
107109
| Comparison::SpuriousFixed
108110
| Comparison::Skipped
109111
| Comparison::Broken
112+
| Comparison::PrepareFail
110113
| Comparison::SameBuildFail
111114
| Comparison::SameTestFail
112115
| Comparison::SameTestSkipped
@@ -406,7 +409,9 @@ fn gen_retry_list(res: &RawTestResults) -> String {
406409
.crates
407410
.iter()
408411
.filter(|crate_res| {
409-
crate_res.res == Comparison::Regressed || crate_res.res == Comparison::SpuriousRegressed
412+
crate_res.res == Comparison::Regressed
413+
|| crate_res.res == Comparison::SpuriousRegressed
414+
|| crate_res.res == Comparison::PrepareFail
410415
})
411416
.map(|crate_res| &crate_res.krate);
412417

@@ -488,15 +493,13 @@ fn compare(
488493

489494
// same
490495
(BuildFail(_), BuildFail(_)) => Comparison::SameBuildFail,
491-
(TestFail(_), TestFail(_)) => Comparison::SameTestFail,
492496
(TestSkipped, TestSkipped) => Comparison::SameTestSkipped,
497+
(TestFail(_), TestFail(_)) => Comparison::SameTestFail,
493498
(TestPass, TestPass) => Comparison::SameTestPass,
494499

495500
// (spurious) fixed
496-
(BuildFail(reason), TestSkipped)
497-
| (BuildFail(reason), TestPass)
498-
| (TestFail(reason), TestPass)
499-
| (BuildFail(reason), TestFail(_)) => {
501+
(BuildFail(reason), TestSkipped | TestFail(_) | TestPass)
502+
| (TestFail(reason), TestPass) => {
500503
if reason.is_spurious() {
501504
Comparison::SpuriousFixed
502505
} else {
@@ -505,24 +508,20 @@ fn compare(
505508
}
506509

507510
// (spurious) regressed
508-
(TestPass, TestFail(reason))
509-
| (TestPass, BuildFail(reason))
510-
| (TestSkipped, BuildFail(reason))
511-
| (TestFail(_), BuildFail(reason)) => {
511+
(TestSkipped | TestFail(_) | TestPass, BuildFail(reason))
512+
| (TestPass, TestFail(reason)) => {
512513
if reason.is_spurious() {
513514
Comparison::SpuriousRegressed
514515
} else {
515516
Comparison::Regressed
516517
}
517518
}
518519

520+
(PrepareFail(_), _) | (_, PrepareFail(_)) => Comparison::PrepareFail,
519521
(Error, _) | (_, Error) => Comparison::Error,
520522
(Skipped, _) | (_, Skipped) => Comparison::Skipped,
521523
(BrokenCrate(_), _) | (_, BrokenCrate(_)) => Comparison::Broken,
522-
(TestFail(_), TestSkipped)
523-
| (TestPass, TestSkipped)
524-
| (TestSkipped, TestFail(_))
525-
| (TestSkipped, TestPass) => {
524+
(TestFail(_) | TestPass, TestSkipped) | (TestSkipped, TestFail(_) | TestPass) => {
526525
panic!("can't compare {res1} and {res2}");
527526
}
528527
},
@@ -836,6 +835,10 @@ mod tests {
836835
TestSkipped, BuildFail(OOM) => SpuriousRegressed;
837836
TestFail(Unknown), BuildFail(OOM) => SpuriousRegressed;
838837

838+
// PrepareFail
839+
PrepareFail(Unknown), BuildFail(Unknown) => PrepareFail;
840+
BuildFail(Unknown), PrepareFail(Unknown) => PrepareFail;
841+
839842
// Errors
840843
Error, TestPass => Error;
841844
Error, TestSkipped => Error;

src/results/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ string_enum!(pub enum BrokenReason {
307307
test_result_enum!(pub enum TestResult {
308308
with_reason {
309309
BrokenCrate(BrokenReason) => "broken",
310+
PrepareFail(FailureReason) => "prepare-fail",
310311
BuildFail(FailureReason) => "build-fail",
311312
TestFail(FailureReason) => "test-fail",
312313
}
@@ -356,6 +357,11 @@ mod tests {
356357

357358
//"build-fail:depends-on()" => BuildFail(DependsOn(vec!["001"])),
358359
test_from_str! {
360+
"prepare-fail:unknown" => PrepareFail(Unknown),
361+
"prepare-fail:oom" => PrepareFail(OOM),
362+
"prepare-fail:docker" => PrepareFail(Docker),
363+
"prepare-fail:no-space" => PrepareFail(NoSpace),
364+
"prepare-fail:timeout" => PrepareFail(Timeout),
359365
"build-fail:unknown" => BuildFail(Unknown),
360366
"build-fail:docker" => BuildFail(Docker),
361367
"build-fail:compiler-error(001, 002)" => BuildFail(CompilerError(btreeset!["001".parse().unwrap(), "002".parse().unwrap()])),

src/runner/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use rustwide::{Build, PrepareError};
1515
use std::collections::{BTreeSet, HashMap, HashSet};
1616
use std::io::ErrorKind;
1717

18-
fn failure_reason(err: &Error) -> FailureReason {
18+
pub(crate) fn failure_reason(err: &Error) -> FailureReason {
1919
if let Some(reason) = err.downcast_ref::<FailureReason>() {
2020
reason.clone()
2121
} else if let Some(command_error) = err.downcast_ref::<CommandError>() {

src/runner/worker.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::experiments::{Experiment, Mode};
44
use crate::prelude::*;
55
use crate::results::{BrokenReason, TestResult};
66
use crate::runner::tasks::{Task, TaskStep};
7-
use crate::runner::test::detect_broken;
7+
use crate::runner::test::{detect_broken, failure_reason};
88
use crate::runner::OverrideResult;
99
use crate::toolchain::Toolchain;
1010
use crate::utils;
@@ -244,7 +244,7 @@ impl<'a> Worker<'a> {
244244
let mut result = if self.config.is_broken(&krate) {
245245
TestResult::BrokenCrate(BrokenReason::Unknown)
246246
} else {
247-
TestResult::Error
247+
TestResult::PrepareFail(failure_reason(&err))
248248
};
249249

250250
if let Some(OverrideResult(res)) = err.downcast_ref() {

0 commit comments

Comments
 (0)