Re: [PATCH v3] setup: fail if .git is not a file or directory
- From
Tian Yuchen <a3205153416@gmail.com>
- Date
- Feb 16, 2026, 16:02 UTC
- Message-ID
- <5b29218a-8d18-41f0-8a03-eac707151945@gmail.com>
- In-Reply-To
- <871pil76sd.fsf@gitster.g>
On 2/16/26 10:37, Junio C Hamano wrote:
> Tian Yuchen <a3205153416@gmail.com> writes:
Show 6 quoted lines
> >> 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.
Show 19 quoted lines
>> 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