1
Fork 0

Auto merge of #55933 - euclio:doc-panic, r=QuietMisdreavus

emit error when doc generation fails

Fixes #41813.

The diagnostic looks something like this:

```
error: couldn't generate documentation: No space left on device (os error 28)
  |
  = note: failed to create or modify "/path/to/crate/target/doc/src/lazycell"
```
This commit is contained in:
bors 2018-12-05 20:27:17 +00:00
commit 14997d56a5
4 changed files with 43 additions and 5 deletions

View file

@ -202,8 +202,8 @@ impl Impl {
#[derive(Debug)]
pub struct Error {
file: PathBuf,
error: io::Error,
pub file: PathBuf,
pub error: io::Error,
}
impl error::Error for Error {

View file

@ -387,9 +387,21 @@ fn main_args(args: &[String]) -> isize {
info!("going to format");
let (error_format, treat_err_as_bug, ui_testing) = diag_opts;
let diag = core::new_handler(error_format, None, treat_err_as_bug, ui_testing);
html::render::run(krate, renderopts, passes.into_iter().collect(), renderinfo, &diag)
.expect("failed to generate documentation");
0
match html::render::run(
krate,
renderopts,
passes.into_iter().collect(),
renderinfo,
&diag,
) {
Ok(_) => rustc_driver::EXIT_SUCCESS,
Err(e) => {
diag.struct_err(&format!("couldn't generate documentation: {}", e.error))
.note(&format!("failed to create or modify \"{}\"", e.file.display()))
.emit();
rustc_driver::EXIT_FAILURE
}
}
})
}

View file

@ -0,0 +1,25 @@
-include ../tools.mk
# This test verifies that rustdoc doesn't ICE when it encounters an IO error
# while generating files. Ideally this would be a rustdoc-ui test, so we could
# verify the error message as well.
OUTPUT_DIR := "$(TMPDIR)/rustdoc-io-error"
# Ignore Windows: the test uses `chmod`.
ifndef IS_WINDOWS
# This test operates by creating a temporary directory and modifying its
# permissions so that it is not writable. We have to take special care to set
# the permissions back to normal so that it's able to be deleted later.
all:
mkdir -p $(OUTPUT_DIR)
chmod u-w $(OUTPUT_DIR)
-$(shell $(RUSTDOC) -o $(OUTPUT_DIR) foo.rs)
chmod u+w $(OUTPUT_DIR)
exit $($(.SHELLSTATUS) -eq 1)
else
all:
endif

View file

@ -0,0 +1 @@
pub struct Foo;