Mercurial > hg
changeset 52034:b55f653a0b34
rust-utils: move the `filesystem_now` function to a util
This is going to be useful for an upcoming `hg update` fastpath.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 30 Sep 2024 17:45:10 +0200 |
parents | 88aa21d654e5 |
children | babfa9ddca0e |
files | rust/hg-core/src/dirstate_tree/status.rs rust/hg-core/src/utils/files.rs |
diffstat | 2 files changed, 25 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/dirstate_tree/status.rs Mon Sep 30 17:43:51 2024 +0200 +++ b/rust/hg-core/src/dirstate_tree/status.rs Mon Sep 30 17:45:10 2024 +0200 @@ -9,6 +9,7 @@ use crate::dirstate_tree::on_disk::DirstateV2ParseError; use crate::matchers::get_ignore_function; use crate::matchers::{Matcher, VisitChildrenSet}; +use crate::utils::files::filesystem_now; use crate::utils::files::get_bytes_from_os_string; use crate::utils::files::get_bytes_from_path; use crate::utils::files::get_path_from_bytes; @@ -30,7 +31,6 @@ use std::path::Path; use std::path::PathBuf; use std::sync::Mutex; -use std::time::SystemTime; /// Returns the status of the working directory compared to its parent /// changeset. @@ -1034,22 +1034,3 @@ } } } - -/// Return the `mtime` of a temporary file newly-created in the `.hg` directory -/// of the give repository. -/// -/// This is similar to `SystemTime::now()`, with the result truncated to the -/// same time resolution as other files’ modification times. Using `.hg` -/// instead of the system’s default temporary directory (such as `/tmp`) makes -/// it more likely the temporary file is in the same disk partition as contents -/// of the working directory, which can matter since different filesystems may -/// store timestamps with different resolutions. -/// -/// This may fail, typically if we lack write permissions. In that case we -/// should continue the `status()` algoritm anyway and consider the current -/// date/time to be unknown. -fn filesystem_now(repo_root: &Path) -> Result<SystemTime, io::Error> { - tempfile::tempfile_in(repo_root.join(".hg"))? - .metadata()? - .modified() -}
--- a/rust/hg-core/src/utils/files.rs Mon Sep 30 17:43:51 2024 +0200 +++ b/rust/hg-core/src/utils/files.rs Mon Sep 30 17:45:10 2024 +0200 @@ -16,11 +16,15 @@ }; use lazy_static::lazy_static; use same_file::is_same_file; -use std::borrow::{Cow, ToOwned}; use std::ffi::{OsStr, OsString}; use std::iter::FusedIterator; use std::ops::Deref; use std::path::{Path, PathBuf}; +use std::{ + borrow::{Cow, ToOwned}, + io, + time::SystemTime, +}; pub fn get_os_str_from_bytes(bytes: &[u8]) -> &OsStr { let os_str; @@ -306,6 +310,25 @@ } } +/// Return the `mtime` of a temporary file newly-created in the `.hg` directory +/// of the give repository. +/// +/// This is similar to `SystemTime::now()`, with the result truncated to the +/// same time resolution as other files’ modification times. Using `.hg` +/// instead of the system’s default temporary directory (such as `/tmp`) makes +/// it more likely the temporary file is in the same disk partition as contents +/// of the working directory, which can matter since different filesystems may +/// store timestamps with different resolutions. +/// +/// This may fail, typically if we lack write permissions. In that case we +/// should continue the `status()` algoritm anyway and consider the current +/// date/time to be unknown. +pub fn filesystem_now(repo_root: &Path) -> Result<SystemTime, io::Error> { + tempfile::tempfile_in(repo_root.join(".hg"))? + .metadata()? + .modified() +} + #[cfg(test)] mod tests { use super::*;