Re: "git clone" executed as root on solaris 10 shreds UFS (it ispossible to create hardlinks for directories as root under solaris)
- From
Johannes Sixt <j.sixt@eudaptics.com>
- Date
- Jul 16, 2007, 14:35 UTC
- Message-ID
- <469B821E.85E5EDA9@eudaptics.com>
- In-Reply-To
- <20070716134529.GC26675@cip.informatik.uni-erlangen.de>
Thomas Glanzmann wrote:
Show 18 quoted lines
> static void create_directories(const char *path, const struct checkout *state)
> {
> ...
> if (mkdir(buf, 0777)) {
> => if (errno == EEXIST) {
> struct stat st;
> => if (len > state->base_dir_len && state->force && !unlink(buf) && !mkdir(buf, 0777))
> continue;
> if (!stat(buf, &st) && S_ISDIR(st.st_mode))
> continue; /* ok */
> }
> die("cannot create directory at %s", buf);
> }
> ...
>
> I think here is the problem. I don't understand what the code should do
> actually. Or why the directory is deleted and re-created (maybe something todo
> with permissions)?It tries to remove a *file* that is in the way and create the directory in its place. But since your unlink() behaves incorrectly (it is supposed to *fail* for directories), the logic does not quite work as expected - it mistakes the directory for a file.
Try swapping the two inner-most if-blocks.
-- Hannes