Subject: Re: [PATCH 6/7] Make branch merging aware of underlying case-insensitive filsystems

From: Junio C Hamano <[email-masked]>
Date: Sat, 22 Mar 2008 23:13:09 -0700

Linus Torvalds <[email-masked]> writes:

> @@ -540,6 +556,16 @@ static int verify_absent(struct cache_entry *ce, const char *action,
>  		int dtype = ce_to_dtype(ce);
>  		struct cache_entry *result;
>  
> +		/*
> +		 * It may be that the 'lstat()' succeeded even though
> +		 * target 'ce' was absent, because there is an old
> +		 * entry that is different only in case..
> +		 *
> +		 * Ignore that lstat() if it matches.
> +		 */
> +		if (ignore_case && icase_exists(o, ce, &st))
> +			return 0;
> +

It may well be the case that this lstat() returning success was caused by
a ghost match with a file with different case, and I think it is the right
thing to say "no, it does not exist" if that is the case.

I wonder what happens when the file with the same case does exist that we
are trying to make sure is missing?

As far as I can tell, icase_exists() does not ask "does a file with this
name in different case exist, and a file with this exact case doesn't?"
but asks "does a file with this name, or another name that is different
only in case, exist?".