diff --git a/crates/bashkit/src/builtins/rg/mod.rs b/crates/bashkit/src/builtins/rg/mod.rs index cb7184ab..4cbee008 100644 --- a/crates/bashkit/src/builtins/rg/mod.rs +++ b/crates/bashkit/src/builtins/rg/mod.rs @@ -4463,6 +4463,7 @@ fn rg_quiet_result( opts: &RgOptions, match_count: usize, any_match: &mut bool, + stderr: &str, ) -> Option { let selected = if opts.files_without_matches { match_count == 0 @@ -4472,7 +4473,12 @@ fn rg_quiet_result( if selected { *any_match = true; if !opts.stats { - return Some(ExecResult::ok(String::new())); + return Some(ExecResult { + stdout: String::new(), + stderr: stderr.to_string(), + exit_code: 0, + ..Default::default() + }); } } None @@ -4743,7 +4749,9 @@ impl Builtin for Rg { let matched = if opts.invert_match { !matched } else { matched }; if !matched { if opts.quiet { - if let Some(result) = rg_quiet_result(&opts, 0, &mut any_match) { + if let Some(result) = + rg_quiet_result(&opts, 0, &mut any_match, &collected_inputs.stderr) + { return Ok(result); } continue; @@ -4775,7 +4783,9 @@ impl Builtin for Rg { stats.matched_lines += 1; stats.files_with_matches += 1; if opts.quiet { - if let Some(result) = rg_quiet_result(&opts, 1, &mut any_match) { + if let Some(result) = + rg_quiet_result(&opts, 1, &mut any_match, &collected_inputs.stderr) + { return Ok(result); } continue; @@ -4952,7 +4962,12 @@ impl Builtin for Rg { } if opts.quiet { - if let Some(result) = rg_quiet_result(&opts, match_count, &mut any_match) { + if let Some(result) = rg_quiet_result( + &opts, + match_count, + &mut any_match, + &collected_inputs.stderr, + ) { return Ok(result); } continue; @@ -5113,7 +5128,12 @@ impl Builtin for Rg { } if opts.quiet { - if let Some(result) = rg_quiet_result(&opts, match_count, &mut any_match) { + if let Some(result) = rg_quiet_result( + &opts, + match_count, + &mut any_match, + &collected_inputs.stderr, + ) { return Ok(result); } continue; @@ -5543,7 +5563,9 @@ impl Builtin for Rg { } if opts.quiet { - if let Some(result) = rg_quiet_result(&opts, match_count, &mut any_match) { + if let Some(result) = + rg_quiet_result(&opts, match_count, &mut any_match, &collected_inputs.stderr) + { return Ok(result); } continue; @@ -6778,6 +6800,28 @@ mod tests { cwd: "/proj", output: RgDiffOutput::UnorderedLines, }, + RgDiffCase { + name: "quiet keeps missing file diagnostics when match found", + args: &["-q", "needle", "proj/missing.txt", "proj/a.txt"], + stdin: None, + files: DIFF_BASIC_FILES, + cwd: "/", + output: RgDiffOutput::Exact, + }, + RgDiffCase { + name: "quiet no messages suppresses missing file diagnostics", + args: &[ + "--no-messages", + "-q", + "needle", + "proj/missing.txt", + "proj/a.txt", + ], + stdin: None, + files: DIFF_BASIC_FILES, + cwd: "/", + output: RgDiffOutput::Exact, + }, RgDiffCase { name: "relative recursive display", args: &["needle", "proj"],