|
| 1 | +use std::path::Path; |
| 2 | + |
1 | 3 | use anyhow::Context; |
2 | 4 | use camino::{Utf8Path,Utf8PathBuf}; |
3 | 5 |
|
@@ -86,36 +88,57 @@ llvm-config = "{llvm_config}" |
86 | 88 | log::info!("Using following `config.toml` for running tests:\n{config_content}"); |
87 | 89 |
|
88 | 90 | // Simulate a stage 0 compiler with the extracted optimized dist artifacts. |
89 | | - std::fs::write("config.toml", config_content)?; |
90 | | - |
91 | | -let x_py = env.checkout_path().join("x.py"); |
92 | | -letmut args = vec![ |
93 | | - env.python_binary(), |
94 | | - x_py.as_str(), |
95 | | -"test", |
96 | | -"--build", |
97 | | - env.host_tuple(), |
98 | | -"--stage", |
99 | | -"0", |
100 | | -"tests/assembly", |
101 | | -"tests/codegen", |
102 | | -"tests/codegen-units", |
103 | | -"tests/incremental", |
104 | | -"tests/mir-opt", |
105 | | -"tests/pretty", |
106 | | -"tests/run-make/glibc-symbols-x86_64-unknown-linux-gnu", |
107 | | -"tests/ui", |
108 | | -"tests/crashes", |
109 | | -]; |
110 | | -for test_path in env.skipped_tests(){ |
111 | | - args.extend(["--skip", test_path]); |
| 91 | +with_backed_up_file(Path::new("config.toml"),&config_content, || { |
| 92 | +let x_py = env.checkout_path().join("x.py"); |
| 93 | +letmut args = vec![ |
| 94 | + env.python_binary(), |
| 95 | + x_py.as_str(), |
| 96 | +"test", |
| 97 | +"--build", |
| 98 | + env.host_tuple(), |
| 99 | +"--stage", |
| 100 | +"0", |
| 101 | +"tests/assembly", |
| 102 | +"tests/codegen", |
| 103 | +"tests/codegen-units", |
| 104 | +"tests/incremental", |
| 105 | +"tests/mir-opt", |
| 106 | +"tests/pretty", |
| 107 | +"tests/run-make/glibc-symbols-x86_64-unknown-linux-gnu", |
| 108 | +"tests/ui", |
| 109 | +"tests/crashes", |
| 110 | +]; |
| 111 | +for test_path in env.skipped_tests(){ |
| 112 | + args.extend(["--skip", test_path]); |
| 113 | +} |
| 114 | +cmd(&args) |
| 115 | +.env("COMPILETEST_FORCE_STAGE0","1") |
| 116 | +// Also run dist-only tests |
| 117 | +.env("COMPILETEST_ENABLE_DIST_TESTS","1") |
| 118 | +.run() |
| 119 | +.context("Cannot execute tests") |
| 120 | +}) |
| 121 | +} |
| 122 | + |
| 123 | +/// Backup `path` (if it exists), then write `contents` into it, and then restore the original |
| 124 | +/// contents of the file. |
| 125 | +fnwith_backed_up_file<F>(path:&Path,contents:&str,func:F) -> anyhow::Result<()> |
| 126 | +where |
| 127 | +F:FnOnce() -> anyhow::Result<()>, |
| 128 | +{ |
| 129 | +let original_contents = |
| 130 | +if path.is_file(){Some(std::fs::read_to_string(path)?)}else{None}; |
| 131 | + |
| 132 | +// Overwrite it with new contents |
| 133 | + std::fs::write(path, contents)?; |
| 134 | + |
| 135 | +let ret = func(); |
| 136 | + |
| 137 | +ifletSome(original_contents) = original_contents { |
| 138 | + std::fs::write(path, original_contents)?; |
112 | 139 | } |
113 | | -cmd(&args) |
114 | | -.env("COMPILETEST_FORCE_STAGE0","1") |
115 | | -// Also run dist-only tests |
116 | | -.env("COMPILETEST_ENABLE_DIST_TESTS","1") |
117 | | -.run() |
118 | | -.context("Cannot execute tests") |
| 140 | + |
| 141 | + ret |
119 | 142 | } |
120 | 143 |
|
121 | 144 | /// Tries to find the version of the dist artifacts (either nightly, beta, or 1.XY.Z). |
|
0 commit comments