git/list[1] front-page[2] threads[3] people[4] search[5] about
wed 2026-10-07 17:27 UTC

Re: [PATCH] Don't search files with an unset "grep" attribute

From
Conrad Irwin <conrad.irwin@gmail.com>
Date
Feb 1, 2012, 09:28 UTC
Message-ID
<CAOTq_ptj06aNGsQRjV0fVRxnQFBHmU2FFSXwWDUUk9MM77k2LQ@mail.gmail.com>
In-Reply-To
<20120201091009.GA20984@sigill.intra.peff.net>
On Wed, Feb 1, 2012 at 1:10 AM, Jeff King <peff@peff.net> wrote:
Show 6 quoted lines
> On Wed, Feb 01, 2012 at 03:20:05AM -0500, Jeff King wrote:
>
> Actually, it's a little bit more complicated. I was looking at a
> slightly old version of grep.c. Since 0579f91 (grep: enable threading
> with -p and -W using lazy attribute lookup, 2011-12-12), the lookup
> happens in lots of sub-functions, and locking is required.
Heh, you just beat me to it.
> But there's more. Respecting binary attributes does mean looking up
> attributes for _every_ file. And that has a noticeable impact. My
> best-of-five for "git grep foo" on linux-2.6 went from 0.302s to 0.392s.
> Yuck.

The first time I introduced this behaviour[1], I made it conditional on a preference — those who wanted "good" grep could set the preference, while those who wanted "fast" grep could not. I think that's not a good idea, though if the performance issues are show-stoppers, I'd suggest the opposite preference (so speed-freaks can disable the checks).

Tests from [1] included below in case they're still useful (they pass with your change)

[1] http://article.gmane.org/gmane.comp.version-control.git/179299/match=grep ---

diff --git a/t/t7008-grep-binary.sh b/t/t7008-grep-binary.sh
index 917a264..4d94461 100755
--- a/t/t7008-grep-binary.sh
+++ b/t/t7008-grep-binary.sh
@@ -99,4 +99,23 @@ test_expect_success 'git grep y<NUL>x a' "
        test_must_fail git grep -f f a
 "

+test_expect_success 'git -c grep.binaryFiles=1 grep ina a' "
+       echo 'a diff' > .gitattributes &&
+       printf 'binaryQfile' | q_to_nul >a &&
+       echo 'a:binaryQfile' | q_to_nul >expect &&
+       git -c grep.binaryFiles=1 grep ina a > actual &&
+       rm .gitattributes &&
+       test_cmp expect actual
+"
+test_expect_success 'git -c grep.binaryFiles=1 grep tex t' "
+       echo 'text' > t &&
+       git add t &&
+       echo 't -diff' > .gitattributes &&
+       echo Binary file t matches >expect &&
+       git -c grep.binaryFiles=1 grep tex t >actual &&
+       rm .gitattributes &&
+       test_cmp expect actual
+"
+
+
 test_done
Previous: Jeff KingNext: Junio C Hamano
Message 17 of 43 in “git-grep while excluding files in a blacklist”
  1. Dov GrobgeldJan 17, 2012
  2. Nguyen Thai Ngoc DuyJan 17, 2012
  3. Junio C HamanoJan 17, 2012
  4. Nguyen Thai Ngoc DuyJan 18, 2012
  5. Don't search files with an unset "grep" attributeconrad.irwin@gmail.com, Jan 23, 2012
  6. Junio C HamanoJan 23, 2012
  7. Don't search files with an unset "grep" attributeConrad Irwin, Jan 23, 2012
  8. Junio C HamanoJan 24, 2012
  9. Jeff KingJan 25, 2012
  10. Stephen BashJan 26, 2012
  11. Michael HaggertyJan 26, 2012
  12. Jeff KingJan 26, 2012
  13. Jeff KingJan 27, 2012
  14. Junio C HamanoFeb 1, 2012
  15. Jeff KingFeb 1, 2012
  16. Jeff KingFeb 1, 2012
  17. Conrad IrwinFeb 1, 2012
  18. Junio C HamanoFeb 1, 2012
  19. Jeff KingFeb 1, 2012
  20. Jeff KingFeb 1, 2012
  21. 1/2 grep: let grep_buffer callers specify a binary flagJeff King, Feb 1, 2012
  22. 2/2 grep: respect diff attributes for binary-nessJeff King, Feb 1, 2012
  23. Junio C HamanoFeb 2, 2012
  24. Jeff KingFeb 2, 2012
  25. Junio C HamanoFeb 2, 2012
  26. 0/9 respect binary attribute in grepJeff King, Feb 2, 2012
  27. 1/9 grep: make locking flag globalJeff King, Feb 2, 2012
  28. 2/9 grep: move sha1-reading mutex into low-level codeJeff King, Feb 2, 2012
  29. 3/9 grep: refactor the concept of "grep source" into an objectJeff King, Feb 2, 2012
  30. 4/9 convert git-grep to use grep_source interfaceJeff King, Feb 2, 2012
  31. 5/9 grep: drop grep_buffer's "name" parameterJeff King, Feb 2, 2012
  32. 6/9 grep: cache userdiff_driver in grep_sourceJeff King, Feb 2, 2012
  33. 7/9 grep: respect diff attributes for binary-nessJeff King, Feb 2, 2012
  34. 8/9 grep: load file data after checking binary-nessJeff King, Feb 2, 2012
  35. 9/9 grep: pre-load userdiff drivers when threadedJeff King, Feb 2, 2012
  36. Jeff KingFeb 2, 2012
  37. Thomas RastFeb 2, 2012
  38. Jeff KingFeb 2, 2012
  39. Junio C HamanoFeb 2, 2012
  40. Junio C HamanoFeb 2, 2012
  41. Jeff KingFeb 2, 2012
  42. Pete WyckoffFeb 4, 2012
  43. Jeff KingFeb 4, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.