On Fri, Oct 06, 2017 at 01:26:48PM +0900, Junio C Hamano wrote: > > We could probably be a bit more specific about the situation, since the > > user will see this message with no context. Maybe something like: > > > > unable to stat just-written file %s > > > > or something. We should probably also use error_errno(). I'd bet if this > > ever triggers that it's likely to be ENOENT, but certainly if it _isn't_ > > that would be interesting information. > > ENOTDIR and to a lesser degree EACCES and ELOOP are also > uninteresting, as we are talking about somebody else mucking with > the filesystem. True. The nice thing about the error() route is that we don't need to make such judgements. The user can decide what is unexpected. > -- >8 -- > From: Lars Schneider <larsxschneider@xxxxxxxxx> > 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. -Peff