Skip to content

Commit 7dcac19

Browse files
authored
Rollup merge of rust-lang#63927 - mark-i-m:filter-spurious, r=ehuss
Filter linkcheck spurious failure r? @ehuss cc @spastorino Basically, we filter errors with messages containing "timed out"... a bit of a hack, but hopefully this will be functionality built into linkcheck soon.
2 parents db493ef + bad8147 commit 7dcac19

File tree

1 file changed

+54
-34
lines changed

1 file changed

+54
-34
lines changed

src/tools/rustbook/src/main.rs

+54-34
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
use clap::{crate_version};
1+
use clap::crate_version;
22

33
use std::env;
44
use std::path::{Path, PathBuf};
55

6-
use clap::{App, ArgMatches, SubCommand, AppSettings};
6+
use clap::{App, AppSettings, ArgMatches, SubCommand};
77

8+
use mdbook::errors::Result as Result3;
89
use mdbook::MDBook;
9-
use mdbook::errors::{Result as Result3};
1010

11+
#[cfg(feature = "linkcheck")]
12+
use failure::Error;
1113
#[cfg(feature = "linkcheck")]
1214
use mdbook::renderer::RenderContext;
1315
#[cfg(feature = "linkcheck")]
1416
use mdbook_linkcheck::{self, errors::BrokenLinks};
15-
use failure::Error;
1617

1718
fn main() {
1819
let d_message = "-d, --dest-dir=[dest-dir]
@@ -21,18 +22,22 @@ fn main() {
2122
'A directory for your book{n}(Defaults to Current Directory when omitted)'";
2223

2324
let matches = App::new("rustbook")
24-
.about("Build a book with mdBook")
25-
.author("Steve Klabnik <[email protected]>")
26-
.version(&*format!("v{}", crate_version!()))
27-
.setting(AppSettings::SubcommandRequired)
28-
.subcommand(SubCommand::with_name("build")
29-
.about("Build the book from the markdown files")
30-
.arg_from_usage(d_message)
31-
.arg_from_usage(dir_message))
32-
.subcommand(SubCommand::with_name("linkcheck")
33-
.about("Run linkcheck with mdBook 3")
34-
.arg_from_usage(dir_message))
35-
.get_matches();
25+
.about("Build a book with mdBook")
26+
.author("Steve Klabnik <[email protected]>")
27+
.version(&*format!("v{}", crate_version!()))
28+
.setting(AppSettings::SubcommandRequired)
29+
.subcommand(
30+
SubCommand::with_name("build")
31+
.about("Build the book from the markdown files")
32+
.arg_from_usage(d_message)
33+
.arg_from_usage(dir_message),
34+
)
35+
.subcommand(
36+
SubCommand::with_name("linkcheck")
37+
.about("Run linkcheck with mdBook 3")
38+
.arg_from_usage(dir_message),
39+
)
40+
.get_matches();
3641

3742
// Check which subcomamnd the user ran...
3843
match matches.subcommand() {
@@ -46,23 +51,44 @@ fn main() {
4651

4752
::std::process::exit(101);
4853
}
49-
},
54+
}
5055
("linkcheck", Some(sub_matches)) => {
51-
if let Err(err) = linkcheck(sub_matches) {
52-
eprintln!("Error: {}", err);
53-
54-
#[cfg(feature = "linkcheck")]
55-
{
56-
if let Ok(broken_links) = err.downcast::<BrokenLinks>() {
57-
for cause in broken_links.links().iter() {
58-
eprintln!("\tCaused By: {}", cause);
59-
}
56+
#[cfg(feature = "linkcheck")]
57+
{
58+
if let Err(err) = linkcheck(sub_matches) {
59+
eprintln!("Error: {}", err);
60+
61+
// HACK: ignore timeouts
62+
let actually_broken = err
63+
.downcast::<BrokenLinks>()
64+
.map(|broken_links| {
65+
broken_links
66+
.links()
67+
.iter()
68+
.inspect(|cause| eprintln!("\tCaused By: {}", cause))
69+
.fold(false, |already_broken, cause| {
70+
already_broken || !format!("{}", cause).contains("timed out")
71+
})
72+
})
73+
.unwrap_or(false);
74+
75+
if actually_broken {
76+
std::process::exit(101);
77+
} else {
78+
std::process::exit(0);
6079
}
6180
}
81+
}
6282

63-
::std::process::exit(101);
83+
#[cfg(not(feature = "linkcheck"))]
84+
{
85+
// This avoids the `unused_binding` lint.
86+
println!(
87+
"mdbook-linkcheck is disabled, but arguments were passed: {:?}",
88+
sub_matches
89+
);
6490
}
65-
},
91+
}
6692
(_, _) => unreachable!(),
6793
};
6894
}
@@ -77,12 +103,6 @@ pub fn linkcheck(args: &ArgMatches<'_>) -> Result<(), Error> {
77103
mdbook_linkcheck::check_links(&render_ctx)
78104
}
79105

80-
#[cfg(not(feature = "linkcheck"))]
81-
pub fn linkcheck(_args: &ArgMatches<'_>) -> Result<(), Error> {
82-
println!("mdbook-linkcheck is disabled.");
83-
Ok(())
84-
}
85-
86106
// Build command implementation
87107
pub fn build(args: &ArgMatches<'_>) -> Result3<()> {
88108
let book_dir = get_book_dir(args);

0 commit comments

Comments
 (0)