Re: Git for Windows: mingw.c's strange usage of creation time as ctime?
Hello Jonathan,
On 04.10.2017 04:23, Jonathan Nieder wrote:
Show 22 quoted lines
> +git-for-windows
> Hi Marc,
>
> Marc Strapetz wrote:
>
>> compat/mingw.c assigns the Windows file creation time [1] to Git's
>> ctime fields at line 591 and at line 705:
>>
>> buf->st_ctime = filetime_to_time_t(&(fdata.ftCreationTime));
>>
>> ftCreationTime > ftLastWriteTime is actually possible after copying
>> a file, so it makes sense to include this timestamp somehow in the
>> Index, but I think it would be better to use the maximum of
>> ftLastWriteTime and ftCreationTime here which is less confusing and
>> closer to Unix's ctime:
>>
>> buf->st_ctime = max(buf->st_mtime,
>> filetime_to_time_t(&(fdata.ftCreationTime));
>
> Can you say more about the practical effect? Is this causing a bug in
> practice, is it a bug waiting to happen, or is it making the code
> difficult to understand without any ill effect expected at run time?
It's mainly about understanding: as a Windows guy it is quite tempting to read "ctime" as "creationTime" and getting this confirmed in code above. (I guess) based on this understanding I wrote wrong Java code 8 years ago for all platforms. My bad of course that I was not digging into Unix sources here.
In practice, .git/index timestamps will become more similar to Linux, getting rid of "strange" old ctime values.
Drawback will be that after such a code update every Index entry will appear as outdated and the initial "git status" will have to compare all file contents. If this is not acceptable, a comment for the two offending lines would make sense.
> By the way, do you have core.trustctime set to true or false?
It seems to be set to true by default on Windows and usually I'm not changing it.
-Marc