There is one more reason other than you said in the Makefile patch one might want to avoid external grep. Cygwin may have perfectly well working grep, but the reason they avoid external grep is because forking is too slow there. --- Makefile | 5 ++--- builtin-grep.c | 12 ++++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 8e80225..bc46fd4 100644 --- a/Makefile +++ b/Makefile @@ -149,8 +149,8 @@ all:: # recommended if Git triggers O(n^2) behavior in your platform's qsort(). # # Define NO_EXTERNAL_GREP if you don't want "git grep" to ever call -# your external grep (e.g., if your system lacks grep, or if its grep is -# not very featureful). +# your external grep (e.g., if your system lacks grep, if its grep is +# broken, or spawning external process is slower than built-in grep git has). GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE @$(SHELL_PATH) ./GIT-VERSION-GEN @@ -470,7 +470,6 @@ ifeq ($(uname_O),Cygwin) NO_STRCASESTR = YesPlease NO_MEMMEM = YesPlease NO_SYMLINK_HEAD = YesPlease - NO_EXTERNAL_GREP = YesPlease NEEDS_LIBICONV = YesPlease NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes NO_TRUSTABLE_FILEMODE = UnfortunatelyYes diff --git a/builtin-grep.c b/builtin-grep.c index f215b28..ef29910 100644 --- a/builtin-grep.c +++ b/builtin-grep.c @@ -12,6 +12,14 @@ #include "builtin.h" #include "grep.h" +#ifndef NO_EXTERNAL_GREP +#ifdef __unix__ +#define NO_EXTERNAL_GREP 0 +#else +#define NO_EXTERNAL_GREP 1 +#endif +#endif + /* * git grep pathspecs are somewhat different from diff-tree pathspecs; * pathname wildcards are allowed. @@ -153,7 +161,7 @@ static int grep_file(struct grep_opt *opt, const char *filename) return i; } -#ifndef NO_EXTERNAL_GREP +#if !NO_EXTERNAL_GREP static int exec_grep(int argc, const char **argv) { pid_t pid; @@ -372,7 +380,7 @@ static int grep_cache(struct grep_opt *opt, const char **paths, int cached) int nr; read_cache(); -#ifndef NO_EXTERNAL_GREP +#if !NO_EXTERNAL_GREP /* * Use the external "grep" command for the case where * we grep through the checked-out files. It tends to -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html