diff --git a/Cargo.lock b/Cargo.lock index 9781068..904bfb7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -643,7 +643,7 @@ checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" [[package]] name = "renom" -version = "1.2.0" +version = "1.3.0" dependencies = [ "clap", "colored", diff --git a/Cargo.toml b/Cargo.toml index 098ff22..d737b30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Mustafa "] edition = "2018" name = "renom" -version = "1.2.0" +version = "1.3.0" description = "A simple program to rename Unreal Engine projects." keywords = ["gamedev", "ue4", "ue5", "unreal_engine", "rename"] categories = [ diff --git a/src/workflows/rename_project/interactive.rs b/src/workflows/rename_project/interactive.rs index 38e11ff..660c453 100644 --- a/src/workflows/rename_project/interactive.rs +++ b/src/workflows/rename_project/interactive.rs @@ -16,6 +16,7 @@ pub fn get_params_from_user() -> Result { fn get_project_root_from_user() -> Result { Text::new("Project root directory path:") + .with_validator(validate_project_root_is_not_special) .with_validator(validate_project_root_is_dir) .with_validator(validate_project_root_contains_project_descriptor) .prompt() @@ -23,6 +24,16 @@ fn get_project_root_from_user() -> Result { .map_err(|err| err.to_string()) } +fn validate_project_root_is_not_special(project_root: &str) -> Result { + match project_root { + "." => Ok(Validation::Invalid("Provided path '.' is protected".into())), + ".." => Ok(Validation::Invalid( + "Provided path '..' is protected".into(), + )), + _ => Ok(Validation::Valid), + } +} + fn validate_project_root_is_dir(project_root: &str) -> Result { match PathBuf::from(project_root).is_dir() { true => Ok(Validation::Valid), diff --git a/src/workflows/rename_project/mod.rs b/src/workflows/rename_project/mod.rs index 9940aa4..944acda 100644 --- a/src/workflows/rename_project/mod.rs +++ b/src/workflows/rename_project/mod.rs @@ -57,6 +57,7 @@ pub fn rename_project(params: Params) -> Result<(), String> { } fn validate_params(params: &Params) -> Result<(), String> { + validate_project_root_is_not_special(¶ms.project_root)?; validate_project_root_is_dir(¶ms.project_root)?; validate_project_root_contains_project_descriptor(¶ms.project_root)?; let project_name = detect_project_name(¶ms.project_root)?; @@ -67,6 +68,14 @@ fn validate_params(params: &Params) -> Result<(), String> { Ok(()) } +fn validate_project_root_is_not_special(project_root: &Path) -> Result<(), String> { + match project_root { + path if path == Path::new(".") => Err("project root cannot be '.'".into()), + path if path == Path::new("..") => Err("project root cannot be '..'".into()), + _ => Ok(()), + } +} + fn validate_project_root_is_dir(project_root: &Path) -> Result<(), String> { match project_root.is_dir() { true => Ok(()),