On Sun, Sep 06, 2009 at 03:58:15PM -0700, Junio C Hamano wrote:
Your patch is queued in 'pu', but it seems to break the exit status in a
strange way with my limited test.
[...]
The command should not give different exit status depending on the
destination of standard output stream.
I could also reproduce this in master using
:~/git/t$ git grep --no-color not-going-to-match .; echo $?
The problem is a small bug in grep_cache(), which is triggered here because
external_grep() cannot deal with relative paths (not sure why that's the
case though). Fix below.
Clemens
--o<--
If external_grep() is called and returns an error, grep_cache() mistakenly
reported a hit, even if there were none. The bug can be triggered by
calling "git grep --no-color" from a subdirectory.
Signed-off-by: Clemens Buchacher <redacted>
---
builtin-grep.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/builtin-grep.c b/builtin-grep.c
index ad0e0a5..b577738 100644
--- a/builtin-grep.c
+++ b/builtin-grep.c
@@ -500,9 +500,9 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached,
* be a lot more optimized
*/
if (!cached && external_grep_allowed) {
- hit = external_grep(opt, paths, cached);
- if (hit >= 0)
- return hit;
+ int ret = external_grep(opt, paths, cached);
+ if (ret >= 0)
+ return ret;
}
#endif
--
1.6.4.2.266.gbaa17