From 6876f9bcdc94c5e0c8cde03040b428f24f19a051 Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Mon, 26 Aug 2019 18:06:24 -0500 Subject: [PATCH 1/4] filter linkcheck spurious failure --- src/tools/rustbook/src/main.rs | 54 ++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/src/tools/rustbook/src/main.rs b/src/tools/rustbook/src/main.rs index 95530b210afd6..0915600bb3875 100644 --- a/src/tools/rustbook/src/main.rs +++ b/src/tools/rustbook/src/main.rs @@ -1,18 +1,18 @@ -use clap::{crate_version}; +use clap::crate_version; use std::env; use std::path::{Path, PathBuf}; -use clap::{App, ArgMatches, SubCommand, AppSettings}; +use clap::{App, AppSettings, ArgMatches, SubCommand}; +use mdbook::errors::Result as Result3; use mdbook::MDBook; -use mdbook::errors::{Result as Result3}; +use failure::Error; #[cfg(feature = "linkcheck")] use mdbook::renderer::RenderContext; #[cfg(feature = "linkcheck")] use mdbook_linkcheck::{self, errors::BrokenLinks}; -use failure::Error; fn main() { let d_message = "-d, --dest-dir=[dest-dir] @@ -21,18 +21,22 @@ fn main() { 'A directory for your book{n}(Defaults to Current Directory when omitted)'"; let matches = App::new("rustbook") - .about("Build a book with mdBook") - .author("Steve Klabnik ") - .version(&*format!("v{}", crate_version!())) - .setting(AppSettings::SubcommandRequired) - .subcommand(SubCommand::with_name("build") - .about("Build the book from the markdown files") - .arg_from_usage(d_message) - .arg_from_usage(dir_message)) - .subcommand(SubCommand::with_name("linkcheck") - .about("Run linkcheck with mdBook 3") - .arg_from_usage(dir_message)) - .get_matches(); + .about("Build a book with mdBook") + .author("Steve Klabnik ") + .version(&*format!("v{}", crate_version!())) + .setting(AppSettings::SubcommandRequired) + .subcommand( + SubCommand::with_name("build") + .about("Build the book from the markdown files") + .arg_from_usage(d_message) + .arg_from_usage(dir_message), + ) + .subcommand( + SubCommand::with_name("linkcheck") + .about("Run linkcheck with mdBook 3") + .arg_from_usage(dir_message), + ) + .get_matches(); // Check which subcomamnd the user ran... match matches.subcommand() { @@ -46,23 +50,35 @@ fn main() { ::std::process::exit(101); } - }, + } ("linkcheck", Some(sub_matches)) => { if let Err(err) = linkcheck(sub_matches) { eprintln!("Error: {}", err); + // HACK: ignore timeouts + #[allow(unused_mut)] + let mut actually_broken = false; + #[cfg(feature = "linkcheck")] { if let Ok(broken_links) = err.downcast::() { for cause in broken_links.links().iter() { eprintln!("\tCaused By: {}", cause); + + if cause.contains("timed out") { + actually_broken = true; + } } } } - ::std::process::exit(101); + if actually_broken { + std::process::exit(101); + } else { + std::process::exit(0); + } } - }, + } (_, _) => unreachable!(), }; } From 2e59c4afd16ea7b887f3d81b5aeea8669b843afe Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Thu, 29 Aug 2019 13:03:22 -0500 Subject: [PATCH 2/4] fix bugs + review comments --- src/tools/rustbook/src/main.rs | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/tools/rustbook/src/main.rs b/src/tools/rustbook/src/main.rs index 0915600bb3875..e155f3f7607f3 100644 --- a/src/tools/rustbook/src/main.rs +++ b/src/tools/rustbook/src/main.rs @@ -56,21 +56,22 @@ fn main() { eprintln!("Error: {}", err); // HACK: ignore timeouts - #[allow(unused_mut)] - let mut actually_broken = false; - - #[cfg(feature = "linkcheck")] - { - if let Ok(broken_links) = err.downcast::() { - for cause in broken_links.links().iter() { - eprintln!("\tCaused By: {}", cause); - - if cause.contains("timed out") { - actually_broken = true; - } - } + let actually_broken = { + #[cfg(feature = "linkcheck")] + { + err.downcast::() + .unwrap_or(false) + .links() + .iter() + .inspect(|cause| eprintln!("\tCaused By: {}", cause)) + .any(|cause| !cause.contains("timed out")); } - } + + #[cfg(not(feature = "linkcheck"))] + { + false + } + }; if actually_broken { std::process::exit(101); From 3f6db849f7270b9126e6609a87058c1bc3aef1da Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Fri, 30 Aug 2019 14:05:39 -0500 Subject: [PATCH 3/4] actually compiles now? --- src/tools/rustbook/src/main.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/tools/rustbook/src/main.rs b/src/tools/rustbook/src/main.rs index e155f3f7607f3..b2111442310ef 100644 --- a/src/tools/rustbook/src/main.rs +++ b/src/tools/rustbook/src/main.rs @@ -60,11 +60,14 @@ fn main() { #[cfg(feature = "linkcheck")] { err.downcast::() + .map(|broken_links| { + broken_links + .links() + .iter() + .inspect(|cause| eprintln!("\tCaused By: {}", cause)) + .any(|cause| !format!("{}", cause).contains("timed out")) + }) .unwrap_or(false) - .links() - .iter() - .inspect(|cause| eprintln!("\tCaused By: {}", cause)) - .any(|cause| !cause.contains("timed out")); } #[cfg(not(feature = "linkcheck"))] From bad8147d01df374e3daa37fe36446781df2eac2d Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Thu, 5 Sep 2019 16:52:44 -0500 Subject: [PATCH 4/4] fix reviewer comments --- src/tools/rustbook/src/main.rs | 66 +++++++++++++++++----------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/tools/rustbook/src/main.rs b/src/tools/rustbook/src/main.rs index b2111442310ef..d5dc9a79b5acb 100644 --- a/src/tools/rustbook/src/main.rs +++ b/src/tools/rustbook/src/main.rs @@ -8,6 +8,7 @@ use clap::{App, AppSettings, ArgMatches, SubCommand}; use mdbook::errors::Result as Result3; use mdbook::MDBook; +#[cfg(feature = "linkcheck")] use failure::Error; #[cfg(feature = "linkcheck")] use mdbook::renderer::RenderContext; @@ -52,36 +53,41 @@ fn main() { } } ("linkcheck", Some(sub_matches)) => { - if let Err(err) = linkcheck(sub_matches) { - eprintln!("Error: {}", err); - - // HACK: ignore timeouts - let actually_broken = { - #[cfg(feature = "linkcheck")] - { - err.downcast::() - .map(|broken_links| { - broken_links - .links() - .iter() - .inspect(|cause| eprintln!("\tCaused By: {}", cause)) - .any(|cause| !format!("{}", cause).contains("timed out")) - }) - .unwrap_or(false) - } - - #[cfg(not(feature = "linkcheck"))] - { - false + #[cfg(feature = "linkcheck")] + { + if let Err(err) = linkcheck(sub_matches) { + eprintln!("Error: {}", err); + + // HACK: ignore timeouts + let actually_broken = err + .downcast::() + .map(|broken_links| { + broken_links + .links() + .iter() + .inspect(|cause| eprintln!("\tCaused By: {}", cause)) + .fold(false, |already_broken, cause| { + already_broken || !format!("{}", cause).contains("timed out") + }) + }) + .unwrap_or(false); + + if actually_broken { + std::process::exit(101); + } else { + std::process::exit(0); } - }; - - if actually_broken { - std::process::exit(101); - } else { - std::process::exit(0); } } + + #[cfg(not(feature = "linkcheck"))] + { + // This avoids the `unused_binding` lint. + println!( + "mdbook-linkcheck is disabled, but arguments were passed: {:?}", + sub_matches + ); + } } (_, _) => unreachable!(), }; @@ -97,12 +103,6 @@ pub fn linkcheck(args: &ArgMatches<'_>) -> Result<(), Error> { mdbook_linkcheck::check_links(&render_ctx) } -#[cfg(not(feature = "linkcheck"))] -pub fn linkcheck(_args: &ArgMatches<'_>) -> Result<(), Error> { - println!("mdbook-linkcheck is disabled."); - Ok(()) -} - // Build command implementation pub fn build(args: &ArgMatches<'_>) -> Result3<()> { let book_dir = get_book_dir(args);