diff: do not reuse worktree files that need "clean" conversion
authorJeff King <peff@peff.net>
Fri, 22 Jul 2016 15:27:53 +0000 (11:27 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 22 Jul 2016 19:31:24 +0000 (12:31 -0700)
commit06dec439a3d00fa0b3141a2d52b33d22b941976c
tree4e0b7ad23778a7fb4264f6e21886095068c85b72
parent0b65a8dbdb38962e700ee16776a3042beb489060
diff: do not reuse worktree files that need "clean" conversion

When accessing a blob for a diff, we may try to reuse file
contents in the working tree, under the theory that it is
faster to mmap those file contents than it would be to
extract the content from the object database.

When we have to filter those contents, though, that
assumption does not hold. Even for our internal conversions
like CRLF, we have to allocate and fill a new buffer anyway.
But much worse, for external clean filters we have to exec
an arbitrary script, and we have no idea how expensive it
may be to run.

So let's skip this optimization when conversion into git's
"clean" form is required. This applies whenever the
"want_file" flag is false. When it's true, the caller
actually wants the smudged worktree contents, which the
reused file by definition already has (in fact, this is a
key optimization going the other direction, since reusing
the worktree file there lets us skip smudge filters).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
t/t0021-conversion.sh