Arseniy Alekseyev <aalekseyev@janestreet.com> [Wed, 13 Oct 2021 10:17:27 -0700] rev 48199
rhg: do not fail when the repo is empty
Differential Revision: https://phab.mercurial-scm.org/D11651
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 12 Oct 2021 19:43:51 +0100] rev 48198
rhg: handle null changelog and manifest revisions
Differential Revision: https://phab.mercurial-scm.org/D11650
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 15:43:45 +0200] rev 48197
rust: update the rust-cpython crate to 0.7.0
This notably brings support for Python 3.10, and includes the panic message
when propagating a Rust panic as a Python exception.
https://github.com/dgrunwald/rust-cpython/blob/master/CHANGELOG.md#070---2021-10-09
Differential Revision: https://phab.mercurial-scm.org/D11630
Simon Sapin <simon.sapin@octobus.net> [Sun, 03 Oct 2021 13:14:43 +0200] rev 48196
dirstate-v2: Name a constant in the Rust implementation
We are about to introduce a Python version of this code that will also need
this constant.
Differential Revision: https://phab.mercurial-scm.org/D11547
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 17:57:57 +0200] rev 48195
dirstate-v2: Replace the 32-bit `mode` field with two bits
Previously we stored the entire value from `stat_result.st_mode`,
like dirstate-v1 does. However only the executable permission
and type of file (only symbolic links and normal files are supported)
are relevant to Mecurial.
So replace this field with two bits in the existing bitfield byte.
For now the unused space is left as padding, as it will be used
for something else soon.
Differential Revision: https://phab.mercurial-scm.org/D11635
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
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 15:29:05 +0200] rev 48190
dirstate-v2: Only convert from SystemTime to Timestamp and not back
Converting from Timestamp back to SystemTime was only used for equality
comparison, but this can also be done on Timestamp values.
Differential Revision: https://phab.mercurial-scm.org/D11631