dirstate-item: make sure we set the mtime-second-ambiguous on v2 write
We want to preserve the second-ambiguity alongside the ambiguous mtime. So we
use the decimated flag for that.
note: the C code was already doing so. No change was needed to it.
Differential Revision: https://phab.mercurial-scm.org/D11845
--- a/mercurial/pure/parsers.py Wed Nov 24 04:59:48 2021 +0100
+++ b/mercurial/pure/parsers.py Wed Nov 24 05:00:06 2021 +0100
@@ -483,6 +483,8 @@
flags |= DIRSTATE_V2_MODE_IS_SYMLINK
if self._mtime_s is not None:
flags |= DIRSTATE_V2_HAS_MTIME
+ if self._mtime_second_ambiguous:
+ flags |= DIRSTATE_V2_MTIME_SECOND_AMBIGUOUS
if self._fallback_exec is not None:
flags |= DIRSTATE_V2_HAS_FALLBACK_EXEC
--- a/rust/hg-core/src/dirstate/entry.rs Wed Nov 24 04:59:48 2021 +0100
+++ b/rust/hg-core/src/dirstate/entry.rs Wed Nov 24 05:00:06 2021 +0100
@@ -43,7 +43,10 @@
truncated_seconds: u32,
/// Always in the `0 .. 1_000_000_000` range.
nanoseconds: u32,
- second_ambiguous: bool,
+ /// TODO this should be in DirstateEntry, but the current code needs
+ /// refactoring to use DirstateEntry instead of TruncatedTimestamp for
+ /// comparison.
+ pub second_ambiguous: bool,
}
impl TruncatedTimestamp {
--- a/rust/hg-core/src/dirstate_tree/on_disk.rs Wed Nov 24 04:59:48 2021 +0100
+++ b/rust/hg-core/src/dirstate_tree/on_disk.rs Wed Nov 24 05:00:06 2021 +0100
@@ -465,6 +465,9 @@
};
let mtime = if let Some(m) = mtime_opt {
flags.insert(Flags::HAS_MTIME);
+ if m.second_ambiguous {
+ flags.insert(Flags::MTIME_SECOND_AMBIGUOUS);
+ };
m.into()
} else {
PackedTruncatedTimestamp::null()