commit 56fa91d998920489dfe83235e74f802b01cc632f Author: Tõnis Kevvai Date: Sun Sep 15 04:51:03 2024 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40d9aca --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +/.idea \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..f459a77 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "fix_parent_mtime" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..7090012 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "fix_parent_mtime" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..8a0369d --- /dev/null +++ b/src/main.rs @@ -0,0 +1,64 @@ +use std::env; +use std::path::PathBuf; +use std::process::exit; + +fn main() -> std::io::Result<()> { + let args: Vec = env::args().collect(); + if args.len() < 3 { + usage(""); + } + + let root_dir = &args[1]; + let root_path = PathBuf::from(root_dir); + + if !root_path.exists() { + usage(format!("Path does not exists: {}", root_dir).as_str()); + } + + if !root_path.is_dir() { + usage(format!("Not a directory: {}", root_dir).as_str()); + } + + if let Ok(metadata) = root_path.metadata() { + if let Ok(time) = metadata.modified() { + println!("{:?}", time); + } else { + usage("Filesystem mtime not supported on this platform"); + } + } else { + usage(format!("No access to path: {}", root_dir).as_str()); + } + + Ok(()) +} + +fn usage(message: &str) { + let app_name = env!("CARGO_PKG_NAME"); + if !message.is_empty() { + eprintln!("{}", message); + } + eprintln!("Usage: {} path", app_name); + exit(1); +} + +#[cfg(test)] +mod test { + use super::*; + + const TEST_DIR: &str = "test_folder"; + + fn prepare(dir: &str) { + let test_dir = PathBuf::from(dir); + let cur_dir = env::current_dir().unwrap(); + let root_dir = cur_dir.join(&test_dir); + dbg!(test_dir); + dbg!(cur_dir); + dbg!(root_dir); + } + + #[test] + fn test_metadata() { + prepare(TEST_DIR); + assert!(true); + } +} \ No newline at end of file diff --git a/test_folder/folder/inner.txt b/test_folder/folder/inner.txt new file mode 100644 index 0000000..e69de29 diff --git a/test_folder/outer.txt b/test_folder/outer.txt new file mode 100644 index 0000000..e69de29