diff --git a/asyncgit/src/sync/utils.rs b/asyncgit/src/sync/utils.rs index fae81f97..a2773c41 100644 --- a/asyncgit/src/sync/utils.rs +++ b/asyncgit/src/sync/utils.rs @@ -66,13 +66,32 @@ pub fn get_head_repo(repo: &Repository) -> Result { } } +/// Wrap Repository::signature to allow unknown user.name. +/// +/// See . +pub fn signature_allow_undefined_name( + repo: &Repository, +) -> std::result::Result, git2::Error> { + match repo.signature() { + Err(e) if e.code() == git2::ErrorCode::NotFound => { + let config = repo.config()?; + git2::Signature::now( + config.get_str("user.name").unwrap_or("unknown"), + config.get_str("user.email")?, + ) + } + + v => v, + } +} + /// this does not run any git hooks pub fn commit(repo_path: &str, msg: &str) -> Result { scope_time!("commit"); let repo = repo(repo_path)?; - let signature = repo.signature()?; + let signature = signature_allow_undefined_name(&repo)?; let mut index = repo.index()?; let tree_id = index.write_tree()?; let tree = repo.find_tree(tree_id)?;