[+cc Thomas, as I am mangling some of his recent work with my refactoring] On Wed, Feb 01, 2012 at 07:52:09PM -0500, Jeff King wrote: > > Hrm, I would have expected a patch that turns "const char *name" into a > > structure that has name and drv as its members, so that later we can tell > > the function more about the nature of the contents. Or a separate pointer > > to drv in place of your "binary" flag word. > [...] > I'll take a look at re-working it that way. Thanks for a dose of sanity. The result turned out much easier to read (and explain in the commit messages, as it was simple to break into smaller commits). In particular, the "don't read binary-marked files at all with -I" optimization became very natural. I implemented all of the other optimizations I mentioned except the "only stream the first few bytes when auto-detecting binary-ness" one. However, it should be easy to do on top of these changes. I need to re-visit the similar change to diff_filespec_is_binary, and I'll do both at the same time. The patches are: [1/9]: grep: make locking flag global [2/9]: grep: move sha1-reading mutex into low-level code [3/9]: grep: refactor the concept of "grep source" into an object [4/9]: convert git-grep to use grep_source interface [5/9]: grep: drop grep_buffer's "name" parameter [6/9]: grep: cache userdiff_driver in grep_source These are all refactoring that should have no behavior change. [7/9]: grep: respect diff attributes for binary-ness This is the point of the series. :) [8/9]: grep: load file data after checking binary-ness [9/9]: grep: pre-load userdiff drivers when threaded And these two are simple optimizations. -Peff -- 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