summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Wernick <justin@worthe-it.co.za>2023-04-05 19:54:16 +0200
committerJustin Wernick <justin@worthe-it.co.za>2023-04-05 19:54:16 +0200
commitd7ac6f915079c2385be902106f97b994f5f65bc5 (patch)
tree22ad0063cde0ae8327f28bce5a7badf12834e564
parentb11d2e3676e96e25e170c99e7fa03dd39e0c403c (diff)
Nicer error handling on reading config
-rw-r--r--readme.org2
-rw-r--r--src/git.rs12
2 files changed, 10 insertions, 4 deletions
diff --git a/readme.org b/readme.org
index 4ebb521..0ee646c 100644
--- a/readme.org
+++ b/readme.org
@@ -35,7 +35,7 @@ Pijul.
- [X] use the right file permissions and config
- [X] don't allow this to be a group the user isn't in
- [X] allow pull and push from shared repos
-- [ ] listing of repos
+- [X] listing of repos
- [ ] set repo descriptions
- [ ] init new repo
- [ ] change an existing repo
diff --git a/src/git.rs b/src/git.rs
index bfac79b..3e6ef98 100644
--- a/src/git.rs
+++ b/src/git.rs
@@ -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() {