[Updated] [+- ] D11846: dirstate-item: make sure we load `mtime-second-ambiguous` from disk
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Fri Dec 3 10:01:00 UTC 2021
marmoute updated this revision to Diff 31285.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D11846?vs=31275&id=31285
BRANCH
default
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D11846/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D11846
AFFECTED FILES
mercurial/cext/parsers.c
mercurial/pure/parsers.py
rust/hg-core/src/dirstate_tree/on_disk.rs
CHANGE DETAILS
diff --git a/rust/hg-core/src/dirstate_tree/on_disk.rs b/rust/hg-core/src/dirstate_tree/on_disk.rs
--- a/rust/hg-core/src/dirstate_tree/on_disk.rs
+++ b/rust/hg-core/src/dirstate_tree/on_disk.rs
@@ -371,11 +371,12 @@
let mtime = if self.flags().contains(Flags::HAS_MTIME)
&& !self.flags().contains(Flags::DIRECTORY)
&& !self.flags().contains(Flags::EXPECTED_STATE_IS_MODIFIED)
- // The current code is not able to do the more subtle comparison that the
- // MTIME_SECOND_AMBIGUOUS requires. So we ignore the mtime
- && !self.flags().contains(Flags::MTIME_SECOND_AMBIGUOUS)
{
- Some(self.mtime.try_into()?)
+ let mut m: TruncatedTimestamp = self.mtime.try_into()?;
+ if self.flags().contains(Flags::MTIME_SECOND_AMBIGUOUS) {
+ m.second_ambiguous = true;
+ }
+ Some(m)
} else {
None
};
diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -149,10 +149,6 @@
"""Build a new DirstateItem object from V2 data"""
has_mode_size = bool(flags & DIRSTATE_V2_HAS_MODE_AND_SIZE)
has_meaningful_mtime = bool(flags & DIRSTATE_V2_HAS_MTIME)
- if flags & DIRSTATE_V2_MTIME_SECOND_AMBIGUOUS:
- # The current code is not able to do the more subtle comparison that the
- # MTIME_SECOND_AMBIGUOUS requires. So we ignore the mtime
- has_meaningful_mtime = False
mode = None
if flags & +DIRSTATE_V2_EXPECTED_STATE_IS_MODIFIED:
@@ -179,13 +175,15 @@
mode |= stat.S_IFLNK
else:
mode |= stat.S_IFREG
+
+ second_ambiguous = flags & DIRSTATE_V2_MTIME_SECOND_AMBIGUOUS
return cls(
wc_tracked=bool(flags & DIRSTATE_V2_WDIR_TRACKED),
p1_tracked=bool(flags & DIRSTATE_V2_P1_TRACKED),
p2_info=bool(flags & DIRSTATE_V2_P2_INFO),
has_meaningful_data=has_mode_size,
has_meaningful_mtime=has_meaningful_mtime,
- parentfiledata=(mode, size, (mtime_s, mtime_ns, False)),
+ parentfiledata=(mode, size, (mtime_s, mtime_ns, second_ambiguous)),
fallback_exec=fallback_exec,
fallback_symlink=fallback_symlink,
)
diff --git a/mercurial/cext/parsers.c b/mercurial/cext/parsers.c
--- a/mercurial/cext/parsers.c
+++ b/mercurial/cext/parsers.c
@@ -450,14 +450,6 @@
dirstate_flag_has_meaningful_data |
dirstate_flag_has_mtime);
}
- if (t->flags & dirstate_flag_mtime_second_ambiguous) {
- /* The current code is not able to do the more subtle comparison
- * that the MTIME_SECOND_AMBIGUOUS requires. So we ignore the
- * mtime */
- t->flags &= ~(dirstate_flag_mtime_second_ambiguous |
- dirstate_flag_has_meaningful_data |
- dirstate_flag_has_mtime);
- }
t->mode = 0;
if (t->flags & dirstate_flag_has_meaningful_data) {
if (t->flags & dirstate_flag_mode_exec_perm) {
To: marmoute, #hg-reviewers
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20211203/ad0e895d/attachment-0002.html>
More information about the Mercurial-patches
mailing list