Simon Sapin <simon.sapin@octobus.net> [Mon, 11 Oct 2021 18:37:21 +0200] rev 48194
dirstate-v2: Store unsigned integers inside DirstateEntry
The negative marker values are not used anymore.
Differential Revision: https://phab.mercurial-scm.org/D11634
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 16:38:13 +0200] rev 48193
dirstate-v2: Truncate directory mtimes to 31 bits of seconds
… instead of 64 bits, while keeping the sub-second presision.
This brings the size of one timestamp from 12 bytes to 8 bytes.
31 bits is chosen instead of 32 because that’s already what happens for the
mtime of files and symlinks, because dirstate-v1 uses negative i32 values as
markers.
Later we’ll add sub-second precision for file/symlink mtimes, making their
dirstate-v2 representation the same as for directories.
Differential Revision: https://phab.mercurial-scm.org/D11633
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 16:20:05 +0200] rev 48192
dirstate-v2: Separate Rust structs for Timestamp and PackedTimestamp
PackedTimestamp is now exclusively for dirstate-v2 serialization purpose.
It contains unaligned big-endian integers. Timestamp is used everywhere else
and contains native Rust integers.
Differential Revision: https://phab.mercurial-scm.org/D11632
Simon Sapin <simon.sapin@octobus.net> [Mon, 11 Oct 2021 22:19:42 +0200] rev 48191
dirstate-v2: Change the representation of negative directory mtime
Change it from how I previously thought C’s `timespec` works
to how it actually works.
The previous behavior was also buggy for timestamps strictly before the
epoch but less than one second away from it, because two’s complement
does not distinguish negative zero from positive zero.
Differential Revision: https://phab.mercurial-scm.org/D11629