Re: Bug: Changing folder case with `git mv` crashes on case-insensitive file system
From: Junio C Hamano <hidden>
Date: 2021-05-06 00:38:19
Johannes Schindelin [off-list ref] writes:
So _if_ we need that file ID information, I would be very much in favor of introducing a proper abstraction, where differentiate between the intention (think `get_inode(const char *path)`) from the platform-dependent implementation detail (think `lstat()`, `CreateFile()` and `GetFileInformationByHandle()`).
I agree in principle. Essentially, we need to
(1) examine all calls to lstat(2) we make in our codebase, and find
out what members of "stat" are really used out of the result
for each callsite. This will be different from caller to
caller (some callers may want only ino, other callers may want
ino, size, and mtime, etc.), and we would learn that there are
N patterns.
(2) write N abstracted helper functions (or a single helper that
takes const char *path, struct stat *, and an enum to tell
which one of N patterns this call is about).
(3) replace each lstat(2) call with one of these N abstract helper
functions.
get_inode() might be one of these N functions, but what is important
is that the current callers that want ino and something else should
not be penalized by making two separte calls get_inode() and
get_other_things(), which, when done naively, would result in two
lstat(2) calls.