Merge pull request #1023 from kamalmarhubi/diff-color-fix

print_diff: Don't print color codes if output is not a tty
This commit is contained in:
Nick Cameron 2016-05-31 15:27:11 +01:00
commit d19844d492
3 changed files with 32 additions and 4 deletions

3
Cargo.lock generated
View File

@ -6,6 +6,8 @@ dependencies = [
"env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.4.15 (registry+https://github.com/rust-lang/crates.io-index)",
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"multimap 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 0.1.71 (registry+https://github.com/rust-lang/crates.io-index)",
@ -15,6 +17,7 @@ dependencies = [
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"toml 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-segmentation 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]

View File

@ -27,3 +27,10 @@ env_logger = "0.3"
getopts = "0.2"
itertools = "0.4.15"
multimap = "0.3"
[target.'cfg(unix)'.dependencies]
libc = "0.2.11"
[target.'cfg(windows)'.dependencies]
kernel32-sys = "0.2.2"
winapi = "0.2.7"

View File

@ -88,10 +88,28 @@ pub fn make_diff(expected: &str, actual: &str, context_size: usize) -> Vec<Misma
pub fn print_diff<F>(diff: Vec<Mismatch>, get_section_title: F)
where F: Fn(u32) -> String
{
if let Some(t) = term::stdout() {
print_diff_fancy(diff, get_section_title, t);
} else {
print_diff_basic(diff, get_section_title);
match term::stdout() {
Some(_) if isatty() => print_diff_fancy(diff, get_section_title, term::stdout().unwrap()),
_ => print_diff_basic(diff, get_section_title),
}
// isatty shamelessly adapted from cargo.
#[cfg(unix)]
fn isatty() -> bool {
extern crate libc;
unsafe { libc::isatty(libc::STDOUT_FILENO) != 0 }
}
#[cfg(windows)]
fn isatty() -> bool {
extern crate kernel32;
extern crate winapi;
unsafe {
let handle = kernel32::GetStdHandle(winapi::winbase::STD_OUTPUT_HANDLE);
let mut out = 0;
kernel32::GetConsoleMode(handle, &mut out) != 0
}
}
}