diff --git a/src/main.rs b/src/main.rs index a684ff4..fcc3026 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,7 @@ fn main() -> ExitCode { to, context_count, format, + brief, } = parse_params(opts).unwrap_or_else(|error| { eprintln!("{error}"); exit(2); @@ -69,7 +70,15 @@ fn main() -> ExitCode { exit(2); }), }; - io::stdout().write_all(&result).unwrap(); + if brief && !result.is_empty() { + println!( + "Files {} and {} differ", + from.to_string_lossy(), + to.to_string_lossy() + ); + } else { + io::stdout().write_all(&result).unwrap(); + } if result.is_empty() { ExitCode::SUCCESS } else { diff --git a/src/params.rs b/src/params.rs index b118be7..9efa768 100644 --- a/src/params.rs +++ b/src/params.rs @@ -25,6 +25,7 @@ pub struct Params { pub to: OsString, pub format: Format, pub context_count: usize, + pub brief: bool, } pub fn parse_params>(opts: I) -> Result { @@ -38,6 +39,7 @@ pub fn parse_params>(opts: I) -> Result>(opts: I) -> Result>(opts: I) -> Result Result<(), Box> { Ok(()) } +#[test] +fn differences_brief() -> Result<(), Box> { + let mut file1 = NamedTempFile::new()?; + file1.write_all("foo\n".as_bytes())?; + let mut file2 = NamedTempFile::new()?; + file2.write_all("bar\n".as_bytes())?; + for option in ["", "-u", "-c", "-e"] { + let mut cmd = Command::cargo_bin("diffutils")?; + if !option.is_empty() { + cmd.arg(option); + } + cmd.arg("-q").arg(file1.path()).arg(file2.path()); + cmd.assert() + .code(predicate::eq(1)) + .failure() + .stdout(predicate::eq(format!( + "Files {} and {} differ\n", + file1.path().to_string_lossy(), + file2.path().to_string_lossy() + ))); + } + Ok(()) +} + #[test] fn missing_newline() -> Result<(), Box> { let mut file1 = NamedTempFile::new()?;