On Thu, Mar 14, 2013 at 09:43:00AM +0000, John Keeping wrote: > On Wed, Mar 13, 2013 at 09:45:47AM -0700, Junio C Hamano wrote: > > Does the temporary checkout correctly apply the smudge filter and > > crlf conversion, by the way? If not, regardless of the topic in > > this thread, that may want to be fixed as well. I didn't check. > > What git-difftool does is to create a temporary index containing only > the files that have changed (using git-update-index --index-info) and > then check this out with "git checkout-index --prefix=...". So I think > this question boils down to: does git-checkout-index still read > .gitattributes from the working tree if given --prefix? Having looked at this a bit more, I think it does mostly do the right thing, but there is bug in write_entry() that means it won't handle .gitattributes correctly when using a streaming filter. The path passed to get_stream_filter is only used to decide what filters apply to the file, so shouldn't it be using "ce->name" and not "path" for the same reason that the call to convert_to_working_tree() further down the same function does? -- >8 -- diff --git a/entry.c b/entry.c index 17a6bcc..63c52ed 100644 --- a/entry.c +++ b/entry.c @@ -145,7 +145,7 @@ static int write_entry(struct cache_entry *ce, char *path, const struct checkout struct stat st; if (ce_mode_s_ifmt == S_IFREG) { - struct stream_filter *filter = get_stream_filter(path, ce->sha1); + struct stream_filter *filter = get_stream_filter(ce->name, ce->sha1); if (filter && !streaming_write_entry(ce, path, filter, state, to_tempfile, -- 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