diff --git a/gitbutler-app/src/projects/commands.rs b/gitbutler-app/src/projects/commands.rs index c3f1e0c7d..9e0fb0b7b 100644 --- a/gitbutler-app/src/projects/commands.rs +++ b/gitbutler-app/src/projects/commands.rs @@ -14,10 +14,16 @@ impl From for Error { fn from(value: controller::UpdateError) -> Self { match value { controller::UpdateError::Validation( - controller::UpdateValidationError::KeyNotFound(path) + controller::UpdateValidationError::KeyNotFound(path), ) => Error::UserError { code: Code::Projects, - message: format!("key '{}' not found", path.display()), + message: format!("'{}' not found", path.display()), + }, + controller::UpdateError::Validation(controller::UpdateValidationError::KeyNotFile( + path, + )) => Error::UserError { + code: Code::Projects, + message: format!("'{}' is not a file", path.display()), }, controller::UpdateError::NotFound => Error::UserError { code: Code::Projects, diff --git a/gitbutler-app/src/projects/controller.rs b/gitbutler-app/src/projects/controller.rs index f20392549..232a215a9 100644 --- a/gitbutler-app/src/projects/controller.rs +++ b/gitbutler-app/src/projects/controller.rs @@ -92,13 +92,23 @@ impl Controller { } pub async fn update(&self, project: &UpdateRequest) -> Result { - if let Some(super::AuthKey::Local { private_key_path, .. }) = &project.preferred_key { + if let Some(super::AuthKey::Local { + private_key_path, .. + }) = &project.preferred_key + { use resolve_path::PathResolveExt; let private_key_path = private_key_path.resolve(); + if !private_key_path.exists() { - return Err(UpdateError::Validation( - UpdateValidationError::KeyNotFound(private_key_path.to_path_buf()), - )); + return Err(UpdateError::Validation(UpdateValidationError::KeyNotFound( + private_key_path.to_path_buf(), + ))); + } + + if !private_key_path.is_file() { + return Err(UpdateError::Validation(UpdateValidationError::KeyNotFile( + private_key_path.to_path_buf(), + ))); } } @@ -222,6 +232,8 @@ pub enum UpdateError { pub enum UpdateValidationError { #[error("{0} not found")] KeyNotFound(path::PathBuf), + #[error("{0} is not a file")] + KeyNotFile(path::PathBuf), } #[derive(Debug, thiserror::Error)]