diff options
| author | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-05-16 17:18:19 +0200 |
|---|---|---|
| committer | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-05-17 16:03:59 +0200 |
| commit | 37dee69dacb0fc199d52d9baba3a3caf3018958a (patch) | |
| tree | 1fabdaecf0b46a7fe4aea47fcb50c64daeca0283 /src/bootstrap | |
| parent | e3150564f889a3bad01795d9fcb31d4f14d58a99 (diff) | |
| download | rust-37dee69dacb0fc199d52d9baba3a3caf3018958a.tar.gz rust-37dee69dacb0fc199d52d9baba3a3caf3018958a.zip | |
Add `bless` x.py subcommand for easy ui test replacement
Diffstat (limited to 'src/bootstrap')
| -rw-r--r-- | src/bootstrap/bin/rustc.rs | 7 | ||||
| -rw-r--r-- | src/bootstrap/builder.rs | 5 | ||||
| -rw-r--r-- | src/bootstrap/flags.rs | 12 | ||||
| -rw-r--r-- | src/bootstrap/test.rs | 52 |
4 files changed, 47 insertions, 29 deletions
diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 76d0e6e28ae..4607ca5cf9f 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -297,7 +297,12 @@ fn main() { } if verbose > 1 { - eprintln!("rustc command: {:?}", cmd); + eprintln!( + "rustc command: {:?}={:?} {:?}", + bootstrap::util::dylib_path_var(), + env::join_paths(&dylib_path).unwrap(), + cmd, + ); eprintln!("sysroot: {:?}", sysroot); eprintln!("libdir: {:?}", libdir); } diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index e5824010ef2..d453e922892 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -311,6 +311,8 @@ impl<'a> ShouldRun<'a> { pub enum Kind { Build, Check, + /// Run tests and replace any failing tests' output files (stderr/stout) with the correct ones + Bless, Test, Bench, Dist, @@ -334,6 +336,7 @@ impl<'a> Builder<'a> { native::Llvm, tool::Rustfmt, tool::Miri, native::Lld), Kind::Check => describe!(check::Std, check::Test, check::Rustc, check::CodegenBackend, check::Rustdoc), + Kind::Bless | Kind::Test => describe!(test::Tidy, test::Bootstrap, test::Ui, test::RunPass, test::CompileFail, test::ParseFail, test::RunFail, test::RunPassValgrind, test::MirOpt, test::Codegen, test::CodegenUnits, test::Incremental, test::Debuginfo, @@ -367,6 +370,7 @@ impl<'a> Builder<'a> { let kind = match subcommand { "build" => Kind::Build, "doc" => Kind::Doc, + "bless" => Kind::Bless, "test" => Kind::Test, "bench" => Kind::Bench, "dist" => Kind::Dist, @@ -408,6 +412,7 @@ impl<'a> Builder<'a> { Subcommand::Build { ref paths } => (Kind::Build, &paths[..]), Subcommand::Check { ref paths } => (Kind::Check, &paths[..]), Subcommand::Doc { ref paths } => (Kind::Doc, &paths[..]), + Subcommand::Test { ref paths, bless: true, .. } => (Kind::Bless, &paths[..]), Subcommand::Test { ref paths, .. } => (Kind::Test, &paths[..]), Subcommand::Bench { ref paths, .. } => (Kind::Bench, &paths[..]), Subcommand::Dist { ref paths } => (Kind::Dist, &paths[..]), diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs index 5315a3028ff..8753ccc93cf 100644 --- a/src/bootstrap/flags.rs +++ b/src/bootstrap/flags.rs @@ -59,6 +59,8 @@ pub enum Subcommand { }, Test { paths: Vec<PathBuf>, + /// Whether to automatically update stderr/stdout files + bless: bool, test_args: Vec<String>, rustc_args: Vec<String>, fail_fast: bool, @@ -142,6 +144,7 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`"); let subcommand = args.iter().find(|&s| (s == "build") || (s == "check") + || (s == "bless") || (s == "test") || (s == "bench") || (s == "doc") @@ -162,6 +165,7 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`"); // Some subcommands get extra options match subcommand.as_str() { + "bless" | "test" => { opts.optflag("", "no-fail-fast", "Run all tests regardless of failure"); opts.optmulti("", "test-args", "extra arguments", "ARGS"); @@ -249,6 +253,12 @@ Arguments: ignore the stage passed, as there's no way to compile in non-stage 0 without actually building the compiler."); } + "bless" => { + subcommand_help.push_str("\n +Arguments: + This subcommand works exactly like the `test` subcommand, but also updates stderr/stdout files + before they cause a test failure"); + } "test" => { subcommand_help.push_str("\n Arguments: @@ -319,9 +329,11 @@ Arguments: "check" => { Subcommand::Check { paths: paths } } + "bless" | "test" => { Subcommand::Test { paths, + bless: subcommand.as_str() == "bless", test_args: matches.opt_strs("test-args"), rustc_args: matches.opt_strs("rustc-args"), fail_fast: !matches.opt_present("no-fail-fast"), diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs index 1f81a617237..ecb463fda28 100644 --- a/src/bootstrap/test.rs +++ b/src/bootstrap/test.rs @@ -41,16 +41,31 @@ const ADB_TEST_DIR: &str = "/data/tmp/work"; /// The two modes of the test runner; tests or benchmarks. #[derive(Debug, PartialEq, Eq, Hash, Copy, Clone, PartialOrd, Ord)] pub enum TestKind { + /// Run `cargo bless` + Bless, /// Run `cargo test` Test, /// Run `cargo bench` Bench, } +impl From<Kind> for TestKind { + fn from(kind: Kind) -> Self { + match kind { + Kind::Test => TestKind::Test, + Kind::Bless => TestKind::Bless, + Kind::Bench => TestKind::Bench, + _ => panic!("unexpected kind in crate: {:?}", kind) + } + } +} + impl TestKind { // Return the cargo subcommand for this test kind fn subcommand(self) -> &'static str { match self { + // bless and test are both `test` for folder names and cargo subcommands + TestKind::Bless | TestKind::Test => "test", TestKind::Bench => "bench", } @@ -60,6 +75,7 @@ impl TestKind { impl fmt::Display for TestKind { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(match *self { + TestKind::Bless => "Testing (bless)", TestKind::Test => "Testing", TestKind::Bench => "Benchmarking", }) @@ -951,6 +967,10 @@ impl Step for Compiletest { cmd.arg("--host").arg(&*compiler.host); cmd.arg("--llvm-filecheck").arg(builder.llvm_filecheck(builder.config.build)); + if builder.kind == Kind::Bless { + cmd.arg("--bless"); + } + if let Some(ref nodejs) = builder.config.nodejs { cmd.arg("--nodejs").arg(nodejs); } @@ -1342,13 +1362,7 @@ impl Step for CrateLibrustc { for krate in builder.in_tree_crates("rustc-main") { if run.path.ends_with(&krate.path) { - let test_kind = if builder.kind == Kind::Test { - TestKind::Test - } else if builder.kind == Kind::Bench { - TestKind::Bench - } else { - panic!("unexpected builder.kind in crate: {:?}", builder.kind); - }; + let test_kind = builder.kind.into(); builder.ensure(CrateLibrustc { compiler, @@ -1394,13 +1408,7 @@ impl Step for CrateNotDefault { let builder = run.builder; let compiler = builder.compiler(builder.top_stage, run.host); - let test_kind = if builder.kind == Kind::Test { - TestKind::Test - } else if builder.kind == Kind::Bench { - TestKind::Bench - } else { - panic!("unexpected builder.kind in crate: {:?}", builder.kind); - }; + let test_kind = builder.kind.into(); builder.ensure(CrateNotDefault { compiler, @@ -1461,13 +1469,7 @@ impl Step for Crate { let compiler = builder.compiler(builder.top_stage, run.host); let make = |mode: Mode, krate: &CargoCrate| { - let test_kind = if builder.kind == Kind::Test { - TestKind::Test - } else if builder.kind == Kind::Bench { - TestKind::Bench - } else { - panic!("unexpected builder.kind in crate: {:?}", builder.kind); - }; + let test_kind = builder.kind.into(); builder.ensure(Crate { compiler, @@ -1625,13 +1627,7 @@ impl Step for CrateRustdoc { fn make_run(run: RunConfig) { let builder = run.builder; - let test_kind = if builder.kind == Kind::Test { - TestKind::Test - } else if builder.kind == Kind::Bench { - TestKind::Bench - } else { - panic!("unexpected builder.kind in crate: {:?}", builder.kind); - }; + let test_kind = builder.kind.into(); builder.ensure(CrateRustdoc { host: run.host, |
