blob: 681615c973557b4366009d749ac00042bd2b20df (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
mod progress;
use self::progress::Progress;
use crate::common;
use anyhow::Result;
use flate2::read::GzDecoder;
use std::fs;
use std::path::Path;
use tar::Archive;
use walkdir::DirEntry;
const REVISION: &str = "7979016aff545f7b41cc517031026020b340989d";
pub fn base_dir_filter(entry: &DirEntry) -> bool {
let path = entry.path();
if path.is_dir() {
return true; // otherwise walkdir does not visit the files
}
if path.extension().map(|e| e != "rs").unwrap_or(true) {
return false;
}
let path_string = path.to_string_lossy();
let path_string = if cfg!(windows) {
path_string.replace('\\', "/").into()
} else {
path_string
};
// TODO assert that parsing fails on the parse-fail cases
if path_string.starts_with("tests/rust/src/test/parse-fail")
|| path_string.starts_with("tests/rust/src/test/compile-fail")
|| path_string.starts_with("tests/rust/src/test/rustfix")
{
return false;
}
if path_string.starts_with("tests/rust/src/test/ui") {
let stderr_path = path.with_extension("stderr");
if stderr_path.exists() {
// Expected to fail in some way
return false;
}
}
match path_string.as_ref() {
// Deprecated placement syntax
"tests/rust/src/test/ui/obsolete-in-place/bad.rs" |
// Deprecated anonymous parameter syntax in traits
"tests/rust/src/test/ui/error-codes/e0119/auxiliary/issue-23563-a.rs" |
"tests/rust/src/test/ui/issues/issue-13105.rs" |
"tests/rust/src/test/ui/issues/issue-13775.rs" |
"tests/rust/src/test/ui/issues/issue-34074.rs" |
// Deprecated await macro syntax
"tests/rust/src/test/ui/async-await/await-macro.rs" |
// 2015-style dyn that libsyntax rejects
"tests/rust/src/test/ui/dyn-keyword/dyn-2015-no-warnings-without-lints.rs" |
// not actually test cases
"tests/rust/src/test/ui/include-single-expr-helper.rs" |
"tests/rust/src/test/ui/include-single-expr-helper-1.rs" |
"tests/rust/src/test/ui/issues/auxiliary/issue-21146-inc.rs" |
"tests/rust/src/test/ui/macros/auxiliary/macro-comma-support.rs" |
"tests/rust/src/test/ui/macros/auxiliary/macro-include-items-expr.rs" => false,
_ => true,
}
}
pub fn clone_rust() {
let needs_clone = match fs::read_to_string("tests/rust/COMMIT") {
Err(_) => true,
Ok(contents) => contents.trim() != REVISION,
};
if needs_clone {
download_and_unpack().unwrap();
}
}
fn download_and_unpack() -> Result<()> {
let url = format!(
"https://github.com/rust-lang/rust/archive/{}.tar.gz",
REVISION
);
let response = reqwest::blocking::get(&url)?.error_for_status()?;
let progress = Progress::new(response);
let decoder = GzDecoder::new(progress);
let mut archive = Archive::new(decoder);
let prefix = format!("rust-{}", REVISION);
let tests_rust = Path::new("tests/rust");
if tests_rust.exists() {
fs::remove_dir_all(tests_rust)?;
}
for entry in archive.entries()? {
let mut entry = entry?;
let path = entry.path()?;
if path == Path::new("pax_global_header") {
continue;
}
let relative = path.strip_prefix(&prefix)?;
let out = tests_rust.join(relative);
entry.unpack(&out)?;
if common::travis_ci() {
// Something about this makes the travis build not deadlock...
errorf!(".");
}
}
fs::write("tests/rust/COMMIT", REVISION)?;
Ok(())
}
|