Re: [PATCH] merge-recursive: ignore_case shouldn't reject intentional removals
- Date: Fri, 24 Nov 2017 12:29:57 -0800
- From: Elijah Newren <newren@xxxxxxxxx>
- Subject: Re: [PATCH] merge-recursive: ignore_case shouldn't reject intentional removals
On Fri, Nov 24, 2017 at 12:04 PM, Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote:
> On Fri, Nov 24, 2017 at 2:59 PM, Elijah Newren <newren@xxxxxxxxx> wrote:
>> In commit ae352c7f3 (merge-recursive.c: fix case-changing merge bug,
>> 2014-05-01), it was observed that removing files could be problematic on
>> case insensitive file systems, because we could end up removing files
>> that differed in case only rather than deleting the intended file --
>> something that happened when files were renamed on one branch in a way
>> that differed only in case. To avoid that problem, that commit added
>> logic to avoid removing files other than the one intended, rejecting the
>> removal if the files differed only in case.
>> Unfortunately, the logic it used didn't fully implement that condition as
>> stated above; instead it merely checked that a case-insensitive lookup of
>> the file that was requested resulted in finding a file in the index at
>> stage 0, not that the file found in the index actually differed in case.
>> Alternatively, one could view the implementation as making an implicit
>> assumption that the file we actually wanted to remove would never appear
>> in the index with a stage of 0, and thus that if we found a file with our
>> lookup, that it had to be a different file (but different in case only).
>> The net result of this implementation is that it can ignore more requests
>> than it should, leaving a file around in the working copy that should
>> have been removed. Make sure that the file found in the index actually
>> differs in case before silently ignoring the request to remove the file.
> Missing sign-off.
Signed-off-by: Elijah Newren <newren@xxxxxxxxx>