grep: -q match yields exit 0 even after a file error#11
Conversation
GNU grep documents that with -q the exit status is 0 as soon as a line is selected, even if an error (such as a missing file) occurred. uu_grep let had_error take precedence, so 'grep -q PAT missing -' returned 2 instead of 0 when stdin matched. Give quiet+match priority in finish(); without -q, or with -q and no match, a file error still yields exit 2. Fixes the GNU testsuite 'status' test.
|
GNU grep testsuite comparison: |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #11 +/- ##
==========================================
+ Coverage 95.82% 95.90% +0.07%
==========================================
Files 6 6
Lines 1414 1416 +2
Branches 140 141 +1
==========================================
+ Hits 1355 1358 +3
+ Misses 58 57 -1
Partials 1 1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Merging this PR will not alter performance
Comparing Footnotes
|
| if self.config.quiet && self.any_match { | ||
| Ok(()) | ||
| } else if self.had_error { |
There was a problem hiding this comment.
Thinking about it some more, a shorter expression of the old code is had_error && !(quiet && any_match), but I'm not sure if that's any more readable.
GNU grep documents that with -q the exit status is 0 as soon as a line is selected, even if an error (such as a missing file) occurred. uu_grep let had_error take precedence, so 'grep -q PAT missing -' returned 2 instead of 0 when stdin matched. Give quiet+match priority in finish(); without -q, or with -q and no match, a file error still yields exit 2. Fixes the GNU testsuite 'status' test.