mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +00:00
Auto merge of #79370 - jyn514:tidy-error, r=GuillaumeGomez
Don't abort rustdoc tests if `tidy` isn't installed Follow-up to https://github.com/rust-lang/rust/pull/78752. Before: ``` Check compiletest suite=rustdoc mode=rustdoc (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu) running 396 tests ..................................................2020-11-23T12:12:37.735649Z ERROR compiletest::runtest: fatal error, panic: "failed to run tidy - is it installed? - No such file or directory (os error 2)" F................................................. 100/396 .................................................................................................... 200/396 .................................................................................................... 300/396 ...............................i...............2020-11-23T12:15:00.271271Z ERROR compiletest::runtest: fatal error, panic: "failed to run tidy - is it installed? - No such file or directory (os error 2)" F................................................ ``` After: ``` Check compiletest suite=rustdoc mode=rustdoc (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu) running 4 tests .FFF failures: ---- [rustdoc] rustdoc/fn-pointer-arg-name.rs stdout ---- error: htmldocck failed! status: exit code: 1 command: "/usr/bin/python" "/home/joshua/rustc/src/etc/htmldocck.py" "/home/joshua/rustc/build/x86_64-unknown-linux-gnu/test/rustdoc/fn-pointer-arg-name" "/home/joshua/rustc/src/test/rustdoc/fn-pointer-arg-name.rs" stdout: ------------------------------------------ ------------------------------------------ stderr: ------------------------------------------ 4: `@has` check failed `XPATH PATTERN` did not match // `@has` - '//*[`@class="rust` fn"]' 'pub fn f(callback: fn(len: usize, foo: u32))' Encountered 1 errors ------------------------------------------ info: generating a diff against nightly rustdoc failed to run tidy - is it installed? - Permission denied (os error 13) failed to run tidy - is it installed? - Permission denied (os error 13) # a diff without running `tidy` ``` r? `@GuillaumeGomez`
This commit is contained in:
commit
4c5c4aa002
@ -327,6 +327,9 @@ pub struct Config {
|
|||||||
/// created in `/<build_base>/rustfix_missing_coverage.txt`
|
/// created in `/<build_base>/rustfix_missing_coverage.txt`
|
||||||
pub rustfix_coverage: bool,
|
pub rustfix_coverage: bool,
|
||||||
|
|
||||||
|
/// whether to run `tidy` when a rustdoc test fails
|
||||||
|
pub has_tidy: bool,
|
||||||
|
|
||||||
// Configuration for various run-make tests frobbing things like C compilers
|
// Configuration for various run-make tests frobbing things like C compilers
|
||||||
// or querying about various LLVM component information.
|
// or querying about various LLVM component information.
|
||||||
pub cc: String,
|
pub cc: String,
|
||||||
|
@ -14,7 +14,7 @@ use std::ffi::OsString;
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{self, ErrorKind};
|
use std::io::{self, ErrorKind};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::process::Command;
|
use std::process::{Command, Stdio};
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
use test::ColorConfig;
|
use test::ColorConfig;
|
||||||
use tracing::*;
|
use tracing::*;
|
||||||
@ -43,6 +43,10 @@ fn main() {
|
|||||||
panic!("Can't find Valgrind to run Valgrind tests");
|
panic!("Can't find Valgrind to run Valgrind tests");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !config.has_tidy && config.mode == Mode::Rustdoc {
|
||||||
|
eprintln!("warning: `tidy` is not installed; generated diffs will be harder to read");
|
||||||
|
}
|
||||||
|
|
||||||
log_config(&config);
|
log_config(&config);
|
||||||
run_tests(config);
|
run_tests(config);
|
||||||
}
|
}
|
||||||
@ -189,6 +193,11 @@ pub fn parse_config(args: Vec<String>) -> Config {
|
|||||||
|
|
||||||
let src_base = opt_path(matches, "src-base");
|
let src_base = opt_path(matches, "src-base");
|
||||||
let run_ignored = matches.opt_present("ignored");
|
let run_ignored = matches.opt_present("ignored");
|
||||||
|
let has_tidy = Command::new("tidy")
|
||||||
|
.arg("--version")
|
||||||
|
.stdout(Stdio::null())
|
||||||
|
.status()
|
||||||
|
.map_or(false, |status| status.success());
|
||||||
Config {
|
Config {
|
||||||
bless: matches.opt_present("bless"),
|
bless: matches.opt_present("bless"),
|
||||||
compile_lib_path: make_absolute(opt_path(matches, "compile-lib-path")),
|
compile_lib_path: make_absolute(opt_path(matches, "compile-lib-path")),
|
||||||
@ -244,6 +253,7 @@ pub fn parse_config(args: Vec<String>) -> Config {
|
|||||||
remote_test_client: matches.opt_str("remote-test-client").map(PathBuf::from),
|
remote_test_client: matches.opt_str("remote-test-client").map(PathBuf::from),
|
||||||
compare_mode: matches.opt_str("compare-mode").map(CompareMode::parse),
|
compare_mode: matches.opt_str("compare-mode").map(CompareMode::parse),
|
||||||
rustfix_coverage: matches.opt_present("rustfix-coverage"),
|
rustfix_coverage: matches.opt_present("rustfix-coverage"),
|
||||||
|
has_tidy,
|
||||||
|
|
||||||
cc: matches.opt_str("cc").unwrap(),
|
cc: matches.opt_str("cc").unwrap(),
|
||||||
cxx: matches.opt_str("cxx").unwrap(),
|
cxx: matches.opt_str("cxx").unwrap(),
|
||||||
|
@ -2394,7 +2394,8 @@ impl<'test> TestCx<'test> {
|
|||||||
|
|
||||||
let proc_res = new_rustdoc.document(&compare_dir);
|
let proc_res = new_rustdoc.document(&compare_dir);
|
||||||
if !proc_res.status.success() {
|
if !proc_res.status.success() {
|
||||||
proc_res.fatal(Some("failed to run nightly rustdoc"), || ());
|
eprintln!("failed to run nightly rustdoc");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
@ -2408,28 +2409,22 @@ impl<'test> TestCx<'test> {
|
|||||||
"-modify",
|
"-modify",
|
||||||
];
|
];
|
||||||
let tidy_dir = |dir| {
|
let tidy_dir = |dir| {
|
||||||
let tidy = |file: &_| {
|
|
||||||
Command::new("tidy")
|
|
||||||
.args(&tidy_args)
|
|
||||||
.arg(file)
|
|
||||||
.spawn()
|
|
||||||
.unwrap_or_else(|err| {
|
|
||||||
self.fatal(&format!("failed to run tidy - is it installed? - {}", err))
|
|
||||||
})
|
|
||||||
.wait()
|
|
||||||
.unwrap()
|
|
||||||
};
|
|
||||||
for entry in walkdir::WalkDir::new(dir) {
|
for entry in walkdir::WalkDir::new(dir) {
|
||||||
let entry = entry.expect("failed to read file");
|
let entry = entry.expect("failed to read file");
|
||||||
if entry.file_type().is_file()
|
if entry.file_type().is_file()
|
||||||
&& entry.path().extension().and_then(|p| p.to_str()) == Some("html".into())
|
&& entry.path().extension().and_then(|p| p.to_str()) == Some("html".into())
|
||||||
{
|
{
|
||||||
tidy(entry.path());
|
let status =
|
||||||
|
Command::new("tidy").args(&tidy_args).arg(entry.path()).status().unwrap();
|
||||||
|
// `tidy` returns 1 if it modified the file.
|
||||||
|
assert!(status.success() || status.code() == Some(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
tidy_dir(out_dir);
|
if self.config.has_tidy {
|
||||||
tidy_dir(&compare_dir);
|
tidy_dir(out_dir);
|
||||||
|
tidy_dir(&compare_dir);
|
||||||
|
}
|
||||||
|
|
||||||
let pager = {
|
let pager = {
|
||||||
let output = Command::new("git").args(&["config", "--get", "core.pager"]).output().ok();
|
let output = Command::new("git").args(&["config", "--get", "core.pager"]).output().ok();
|
||||||
@ -2442,7 +2437,8 @@ impl<'test> TestCx<'test> {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
let mut diff = Command::new("diff");
|
let mut diff = Command::new("diff");
|
||||||
diff.args(&["-u", "-r"]).args(&[&compare_dir, out_dir]);
|
// diff recursively, showing context, and excluding .css files
|
||||||
|
diff.args(&["-u", "-r", "-x", "*.css"]).args(&[&compare_dir, out_dir]);
|
||||||
|
|
||||||
let output = if let Some(pager) = pager {
|
let output = if let Some(pager) = pager {
|
||||||
let diff_pid = diff.stdout(Stdio::piped()).spawn().expect("failed to run `diff`");
|
let diff_pid = diff.stdout(Stdio::piped()).spawn().expect("failed to run `diff`");
|
||||||
|
Loading…
Reference in New Issue
Block a user