use std::fs::{read_dir, File}; use std::os::unix::fs::PermissionsExt; use std::path::Path; use permissions::is_executable; fn main() { println!("Building started..."); println!("Installing git hooks..."); if !Path::new(".git/hooks").exists() { return; } let hooks_dir = read_dir(Path::new(".hooks")).unwrap(); let mut hook_files: Vec = Vec::new(); hooks_dir.for_each(|file| { if file.is_ok() { let file = file.unwrap(); let path = file.path(); let file_name = file.file_name(); let new_path = Path::new(".git/hooks").join(file_name); hook_files.push(new_path.to_str().unwrap().to_string()); std::fs::copy(path.clone(), new_path).unwrap(); } }); println!("Hooks created..."); println!("Checking hooks permissions..."); hook_files.iter().for_each(|file_path| { let file = File::open(Path::new(file_path)).unwrap(); let mut permissions = file.metadata().unwrap().permissions(); permissions.set_mode(0o751); if !is_executable(file_path).unwrap() { file.set_permissions(permissions).unwrap(); } }); println!("Hooks installed correctly!"); }