diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2023-04-05 19:54:16 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2023-04-05 19:54:16 +0200 |
commit | d7ac6f915079c2385be902106f97b994f5f65bc5 (patch) | |
tree | 22ad0063cde0ae8327f28bce5a7badf12834e564 /src | |
parent | b11d2e3676e96e25e170c99e7fa03dd39e0c403c (diff) |
Nicer error handling on reading config
Diffstat (limited to 'src')
-rw-r--r-- | src/git.rs | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -2,7 +2,7 @@ use crate::{ parser::{GitReceivePackArgs, GitUploadPackArgs}, ShackleError, }; -use git2::{Repository, RepositoryInitMode, RepositoryInitOptions}; +use git2::{ErrorCode, Repository, RepositoryInitMode, RepositoryInitOptions}; use std::{fs, path::PathBuf, process::Command}; use user_info::{get_user_groups, get_username}; @@ -126,9 +126,15 @@ pub fn list() -> Result<Vec<RepoMetadata>, ShackleError> { if has_git_ext { if let Ok(repo) = Repository::open_bare(&path) { let config = repo.config()?.snapshot()?; - let shared_config = config.get_str("core.sharedRepository").ok(); // TODO: Could shis fail for other reasons? + let shared_config = config.get_str("core.sharedRepository").or_else(|e| { + if e.code() == ErrorCode::NotFound { + Ok("") + } else { + Err(e) + } + })?; let is_group_shared = - [Some("group"), Some("1"), Some("true")].contains(&shared_config); + [Some("group"), Some("1"), Some("true")].contains(&Some(shared_config)); if is_group_shared == is_checking_group { let description = if description_path.is_file() { |