diff --git a/src/config_file/mod.rs b/src/config_file/mod.rs index 4ecf44b..a1c4c42 100644 --- a/src/config_file/mod.rs +++ b/src/config_file/mod.rs @@ -16,12 +16,20 @@ impl ConfigFile { pub fn new(rel_git_location: PathBuf, sys_location: PathBuf) -> Result> { let home_dir = PathBuf::from(env::var("HOME").expect("$HOME not set")); - let manager_dir = home_dir.join(".dotfiles/"); + let manager_dir = home_dir.join(PathBuf::from(".dotfiles/")); let manager_path = manager_dir.join(rel_git_location); let system_path = sys_location; - let is_dir = fs::metadata(&manager_path)?.is_dir(); + let manager_path_data = fs::metadata(&manager_path); + let sys_path_data = fs::metadata(&system_path); + + let is_dir = match (manager_path_data, sys_path_data) { + (Ok(manager_data), Ok(sys_data)) => manager_data.is_dir() && sys_data.is_dir(), + (Ok(manager_data), Err(_)) => manager_data.is_dir(), + (Err(_), Ok(sys_data)) => sys_data.is_dir(), + (Err(e1), Err(e2)) => panic!("Neither {} nor {} exists or is readable: {}, {}", manager_path.to_str().unwrap(), system_path.to_str().unwrap(), e1, e2), + }; Ok(Self { manager_path, system_path, is_dir }) }