dirstate-v2: Only convert from SystemTime to Timestamp and not back
authorSimon Sapin <simon.sapin@octobus.net>
Tue, 12 Oct 2021 15:29:05 +0200
changeset 48190 0cc0c0972164
parent 48189 6e01bcd111d2
child 48191 a5a673ec8f6f
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
rust/hg-core/src/dirstate_tree/on_disk.rs
rust/hg-core/src/dirstate_tree/status.rs
--- a/rust/hg-core/src/dirstate_tree/on_disk.rs	Fri Oct 08 12:57:24 2021 +0200
+++ b/rust/hg-core/src/dirstate_tree/on_disk.rs	Tue Oct 12 15:29:05 2021 +0200
@@ -15,7 +15,7 @@
 use format_bytes::format_bytes;
 use std::borrow::Cow;
 use std::convert::{TryFrom, TryInto};
-use std::time::{Duration, SystemTime, UNIX_EPOCH};
+use std::time::{SystemTime, UNIX_EPOCH};
 
 /// Added at the start of `.hg/dirstate` when the "v2" format is used.
 /// This a redundant sanity check more than an actual "magic number" since
@@ -462,18 +462,6 @@
     }
 }
 
-impl From<&'_ Timestamp> for SystemTime {
-    fn from(timestamp: &'_ Timestamp) -> Self {
-        let secs = timestamp.seconds.get();
-        let nanos = timestamp.nanoseconds.get();
-        if secs >= 0 {
-            UNIX_EPOCH + Duration::new(secs as u64, nanos)
-        } else {
-            UNIX_EPOCH - Duration::new((-secs) as u64, nanos)
-        }
-    }
-}
-
 fn read_hg_path(
     on_disk: &[u8],
     slice: PathSlice,
--- a/rust/hg-core/src/dirstate_tree/status.rs	Fri Oct 08 12:57:24 2021 +0200
+++ b/rust/hg-core/src/dirstate_tree/status.rs	Tue Oct 12 15:29:05 2021 +0200
@@ -199,7 +199,8 @@
                 // directory eligible for `read_dir` caching.
                 if let Some(meta) = directory_metadata {
                     if let Ok(current_mtime) = meta.modified() {
-                        if current_mtime == cached_mtime.into() {
+                        let current_mtime = Timestamp::from(current_mtime);
+                        if current_mtime == *cached_mtime {
                             // The mtime of that directory has not changed
                             // since then, which means that the results of
                             // `read_dir` should also be unchanged.