rust/hg-core/src/utils/files.rs
changeset 43271 99394e6c5d12
parent 43250 98d996a138de
child 43633 0b7733719d21
child 43868 b06cf2809ec3
--- a/rust/hg-core/src/utils/files.rs	Sun Oct 06 20:18:54 2019 +0300
+++ b/rust/hg-core/src/utils/files.rs	Fri Oct 11 13:39:57 2019 +0200
@@ -12,6 +12,7 @@
 use crate::utils::hg_path::{HgPath, HgPathBuf};
 use std::iter::FusedIterator;
 
+use std::fs::Metadata;
 use std::path::Path;
 
 pub fn get_path_from_bytes(bytes: &[u8]) -> &Path {
@@ -76,6 +77,32 @@
     path.to_ascii_lowercase()
 }
 
+#[derive(Eq, PartialEq, Ord, PartialOrd, Copy, Clone)]
+pub struct HgMetadata {
+    pub st_dev: u64,
+    pub st_mode: u32,
+    pub st_nlink: u64,
+    pub st_size: u64,
+    pub st_mtime: i64,
+    pub st_ctime: i64,
+}
+
+// TODO support other plaforms
+#[cfg(unix)]
+impl HgMetadata {
+    pub fn from_metadata(metadata: Metadata) -> Self {
+        use std::os::unix::fs::MetadataExt;
+        Self {
+            st_dev: metadata.dev(),
+            st_mode: metadata.mode(),
+            st_nlink: metadata.nlink(),
+            st_size: metadata.size(),
+            st_mtime: metadata.mtime(),
+            st_ctime: metadata.ctime(),
+        }
+    }
+}
+
 #[cfg(test)]
 mod tests {
     use super::*;