Subject: Re: [PATCH v3] setup: fail if .git is not a file or directory

From: Tian Yuchen <[email-masked]>
Date: Tue, 17 Feb 2026 00:02:22 +0800

On 2/16/26 10:37, Junio C Hamano wrote:
> Tian Yuchen <[email-masked]> writes:

> 
>> Sorry, I didn't express myself clearly. I meant I tested it myself but
>> never add a test script. Test script will be included in the next patch.
> 
> I see.  Thanks.
>

I am currently working on it. However, this is my first time writing 
test scripts, so I can' guarantee they'll be perfect right away. Please 
feel free to leave your suggestions when the time comes.

>> On the other hand, if I understand correctly, state flows should be
>> categorized as follows:
>>
>>    1. Nothing there (ENOENT) ---> ignore and go up one level
>>    2. Directory (IS_A_DIR) ---> check is_git_directory
>>    3. NOT_A_FILE ---> die
>>    4. *REAL* error (READ_FAILED, INVALID_FORMAT) ---> die
>>
>> And I mixed 1 and 2 and covered 4 in an obscure way (!= STAT_FAILED). I
>> don't think this code is "unrunable" but indeed the logic flow is
>> GARBAGE. I'll fix it.
> 
> The above 4-bullet list makes sense to me.  It makes me wonder what
> the current code does and more importantly what we want to do when
> we find a directory and is_git_directory() says that it is *not* a
> valid one.
> 
> Thanks.
> 

If we find a directory but 'is_git_directory()' reports it as invalid, I 
believe we should treat it the same way as 'ENOENT', isn't it? This 
ensures that a random empty directory named '.git' doesn't stop the 
discovery process.

So, the logic for case 2 becomes:

  - Found a directory;
  - Check 'is_git_directory';
  - a. Valid? -----> Stop, we found it;
  - b. Invalid? -----> Ignore, continue the loop.

Regards,

Yuchen