Re: difftool -d symlinks, under what conditions
- From
John Keeping <john@keeping.me.uk>
- Date
- Mar 14, 2013, 17:25 UTC
- Message-ID
- <20130314172515.GB4256@serenity.lan>
- In-Reply-To
- <20130314094300.GN2317@serenity.lan>
On Thu, Mar 14, 2013 at 09:43:00AM +0000, John Keeping wrote:
Show 10 quoted lines
> 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,