contrib: install pip 24.2 in the Windows dependency installer script
One of the modern pythons was crying about the old version importing `distutils`.
contrib: install the latest py 3.11-3.13 in the Windows dependency script
Note that python 3.11 adds an installer for arm64, which we ignore here because
I don't have a Windows system running arm64, and it's likely we will be dropping
support for some platforms before I get my hands on one.
contrib: update to the latest py3.9 and 3.10 in the Windows dependency script
Python3.8 was already at its last version with an installer, FWIW.
contrib: drop python 3.7 from the Windows dependency installer script
I'm tempted to drop 3.8 too, since we use 3.9 on Windows.
contrib: drop python 3.5 requirements file for Linux automation
The new minimum this cycle is py3.8.
windows: implement `util.cachestat` to fix numerous dirstate problems
I got here by bisecting the
issue1790 related failure on Windows to keep an
entry from being marked "unset" in `test-dirstate.t` back to
eedbf8256263.
There were a handful of other tests failing with an unexpected dirstate entry
state like this, as well as numerous "skip updating dirstate: identity mismatch"
messages added to various tests, as well as an issue with dirstate wrapping with
the largefiles extension[1], all of which appear to be fixed by this. In total,
~25 tests are fully fixed on Windows with this change on default.
This is basically a copy/paste of the posix implementation, but we drop the
`st_mode` comparison- I think the only reason we care about the mode on posix is
to detect +/-x mode changes, but the executable bits on Windows are synthesized
based on the name of the file[2]. None of the other parts of the codebase are
equipped to handle executable bits in the filesystem on Windows anyway, so it
doesn't make sense to worry about them here.
Note that `st_uid` and `st_gid` seem to always be 0 on Windows (and I can't find
them being initialized), so they can probably be dropped from the comparison.
But I doubt they matter any more on posix, since we don't track ownership. The
`st_ino`, `st_dev`, and `st_nlink` attributes all seem to have reasonable values
for comparing like on posix[3].
Also note that `st_ctime` is apparently deprecated in 3.12+ (for reasons I
haven't explored)[4].
[1] https://foss.heptapod.net/mercurial/mercurial-devel/-/merge_requests/884
[2] https://github.com/python/cpython/blob/
aab3210271136ad8e8fecd927b806602c463e1f2/Modules/posixmodule.c#L1948
[3] https://github.com/python/cpython/blob/
aab3210271136ad8e8fecd927b806602c463e1f2/Python/fileutils.c#L1158
[4] https://github.com/python/cpython/blob/
aab3210271136ad8e8fecd927b806602c463e1f2/Modules/posixmodule.c#L2200