# HG changeset patch # User Simon Sapin # Date 1634045345 -7200 # Node ID 0cc0c097216474bdccce3bcc5eaede5d1e648a3a # Parent 6e01bcd111d26c4c131315888adc9d87b45a4fe4 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 diff -r 6e01bcd111d2 -r 0cc0c0972164 rust/hg-core/src/dirstate_tree/on_disk.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, diff -r 6e01bcd111d2 -r 0cc0c0972164 rust/hg-core/src/dirstate_tree/status.rs --- 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.