git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] grep -I: do not bother to read known-binary files
@ 2014-05-14 15:44 Stepan Kasal
  2014-05-14 17:52 ` Junio C Hamano
  2014-05-14 19:41 ` Jeff King
  0 siblings, 2 replies; 10+ messages in thread
From: Stepan Kasal @ 2014-05-14 15:44 UTC (permalink / raw)
  To: GIT Mailing-list; +Cc: Johannes Schindelin, msysGit

From: Johannes Schindelin <johannes.schindelin@gmx.de>
Date: Mon, 8 Nov 2010 16:10:43 +0100

Incidentally, this makes grep -I respect the "binary" attribute (actually,
the "-text" attribute, but "binary" implies that).

Since the attributes are not thread-safe, we now need to switch off
threading if -I was passed.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Stepan Kasal <kasal@ucw.cz>
---

Hi,
this patch has been in msysgit for 3.5 years.
Stepan

 builtin/grep.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/builtin/grep.c b/builtin/grep.c
index 43af5b7..8073fbe 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -18,6 +18,7 @@
 #include "quote.h"
 #include "dir.h"
 #include "pathspec.h"
+#include "attr.h"
 
 static char const * const grep_usage[] = {
 	N_("git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]"),
@@ -163,6 +164,22 @@ static void work_done(struct work_item *w)
 	grep_unlock();
 }
 
+static int skip_binary(struct grep_opt *opt, const char *filename)
+{
+	if ((opt->binary & GREP_BINARY_NOMATCH)) {
+		static struct git_attr *attr_text;
+		struct git_attr_check check;
+
+		if (!attr_text)
+			attr_text = git_attr("text");
+		memset(&check, 0, sizeof(check));
+		check.attr = attr_text;
+		return !git_check_attr(filename, 1, &check) &&
+				ATTR_FALSE(check.value);
+	}
+	return 0;
+}
+
 static void *run(void *arg)
 {
 	int hit = 0;
@@ -173,6 +190,9 @@ static void *run(void *arg)
 		if (!w)
 			break;
 
+		if (skip_binary(opt, (const char *)w->source.identifier))
+			continue;
+
 		opt->output_priv = w;
 		hit |= grep_source(opt, &w->source);
 		grep_source_clear_data(&w->source);
@@ -379,6 +399,9 @@ static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int
 			continue;
 		if (!ce_path_match(ce, pathspec, NULL))
 			continue;
+		if (skip_binary(opt, ce->name))
+			continue;
+
 		/*
 		 * If CE_VALID is on, we assume worktree file and its cache entry
 		 * are identical, even if worktree file has been modified, so use
@@ -803,6 +826,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
 		string_list_append(&path_list, show_in_pager);
 		use_threads = 0;
 	}
+	if ((opt.binary & GREP_BINARY_NOMATCH))
+		use_threads = 0;
 
 	if (!opt.pattern_list)
 		die(_("no pattern given."));
-- 
1.9.2.msysgit.0.335.gd2a461f

-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2014-05-16  9:16 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-14 15:44 [PATCH] grep -I: do not bother to read known-binary files Stepan Kasal
2014-05-14 17:52 ` Junio C Hamano
2014-05-14 19:44   ` Jeff King
2014-05-14 19:41 ` Jeff King
2014-05-14 21:15   ` Junio C Hamano
2014-05-15 17:42   ` Johannes Schindelin
2014-05-15 19:22     ` Jeff King
2014-05-16  8:19       ` Stepan Kasal
2014-05-16  8:29         ` Jeff King
2014-05-16  9:16           ` Stepan Kasal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).