From: Johannes Schindelin Date: Wed, 08 Aug 2007 21:42:27 GMT Subject: Re: [PATCH] checkout_entry: only try to create directories when no file existed there Message-ID: In-Reply-To: <7v4pj93evc.fsf@assigned-by-dhcp.cox.net> Hi, On Wed, 8 Aug 2007, Junio C Hamano wrote: > Johannes Schindelin writes: > > > It is obvious that we do not have to create directories when the file we > > want to check out already existed. > > It is not so obvious to me. In fact I vaguely recall we had > complaint about opposite case where we did not honor a symlink > to be checked out as a symlink because an earlier branch had it > as a directory. That case is not affected by my patch, AFAICT. It only affects the case when you check out an entry, say "a/b/c/d/e/f/g". If that file already exists, we have to remove it, in order to write over it. That's the "unlink" which is above the hunk of the diff I sent. Now, if we have to remove it, we did a stat() before that. It succeeded. So we know that "a/b/c/d/e/f/" exists. It might contain some symlinks, but it exists. So putting the "create_directories()" into the else branch, we avoid doing unnecessary work. Coincidentally, my hackish use case (don't try this at home, kids!) is fixed, too. Ciao, Dscho