diff rust/rhg/src/commands/status.rs @ 48482:112184713852

rhg: Set second_ambiguous as needed in post-status fixup This fixes an intermittent bug that manifested only in test-revert.t, and unfortunately not on CI. On a fast enough machine we could have: 1. A file is modified 2. `rhg status` writes an updated dirstate-v1 3. The same file is modified again ? all within the same integer second. Because the dirstate-v1?file format does not store sub-second precision, step 2 must write the file?s mtime as "unknown" because of the possibility of step 3. However, most of the code now handles timestamps with nanosecond precision in order to take advantage of it in dirstate-v2. `second_ambiguous` must be set for timestamps that become ambiguous if sub-second precision is dropped (such as through serialization in dirstate-v1?format). Differential Revision: https://phab.mercurial-scm.org/D11889
author Simon Sapin <simon.sapin@octobus.net>
date Thu, 09 Dec 2021 10:55:17 +0100
parents 000130cfafb6
children 4a983b69e519
line wrap: on
line diff
--- a/rust/rhg/src/commands/status.rs	Thu Dec 09 10:23:41 2021 +0100
+++ b/rust/rhg/src/commands/status.rs	Thu Dec 09 10:55:17 2021 +0100
@@ -352,9 +352,13 @@
                     let fs_metadata = repo
                         .working_directory_vfs()
                         .symlink_metadata(&fs_path)?;
-                    let mtime = TruncatedTimestamp::for_mtime_of(&fs_metadata)
-                        .when_reading_file(&fs_path)?;
-                    if mtime.is_reliable_mtime(&mtime_boundary) {
+                    if let Some(mtime) =
+                        TruncatedTimestamp::for_reliable_mtime_of(
+                            &fs_metadata,
+                            &mtime_boundary,
+                        )
+                        .when_reading_file(&fs_path)?
+                    {
                         let mode = fs_metadata.mode();
                         let size = fs_metadata.len() as u32 & RANGE_MASK_31BIT;
                         let mut entry = dmap