Re: [PATCH v1 2/2] entry.c: check if file exists after checkout
- From
Lars Schneider <larsxschneider@gmail.com>
- Date
- Oct 8, 2017, 21:41 UTC
- Message-ID
- <C7B91A82-CB55-4435-9204-D6A8F7F640CB@gmail.com>
- In-Reply-To
- <20171006045640.vihagnlnuximzmjs@sigill.intra.peff.net>
Show 37 quoted lines
> On 06 Oct 2017, at 06:56, Jeff King <peff@peff.net> wrote:
>
> On Fri, Oct 06, 2017 at 01:26:48PM +0900, Junio C Hamano wrote:
>
> ...
>> -- >8 --
>> From: Lars Schneider <larsxschneider@gmail.com>
>> Date: Thu, 5 Oct 2017 12:44:07 +0200
>> Subject: [PATCH] entry.c: check if file exists after checkout
>>
>> If we are checking out a file and somebody else racily deletes our file,
>> then we would write garbage to the cache entry. Fix that by checking
>> the result of the lstat() call on that file. Print an error to the user
>> if the file does not exist.
>
> I don't know if we wanted to capture any of the reasoning behind using
> error() here or not. Frankly, I'm not sure how to argue for it
> succinctly. :) I'm happy with letting it live on in the list archive.
>
>> diff --git a/entry.c b/entry.c
>> index f879758c73..6d9de3a5aa 100644
>> --- a/entry.c
>> +++ b/entry.c
>> @@ -341,7 +341,9 @@ static int write_entry(struct cache_entry *ce,
>> if (state->refresh_cache) {
>> assert(state->istate);
>> if (!fstat_done)
>> - lstat(ce->name, &st);
>> + if (lstat(ce->name, &st) < 0)
>> + return error_errno("unable stat just-written file %s",
>> + ce->name);
>
> s/unable stat/unable to stat/, I think.
>
> Other than that, this looks fine to me.
>
> -PeffLooks fine to me, too.
Thanks, Lars