diff options
Diffstat (limited to 'src/git.rs')
-rw-r--r-- | src/git.rs | 50 |
1 files changed, 27 insertions, 23 deletions
@@ -70,41 +70,45 @@ pub fn init( group: &Option<String>, description: &Option<String>, ) -> Result<GitInitResult, ShackleError> { - fn init_group(repo_name: &str, group: &str) -> Result<GitInitResult, ShackleError> { + fn init_group_opts( + repo_name: &str, + group: &str, + ) -> Result<(PathBuf, RepositoryInitOptions), ShackleError> { if !verify_user_is_in_group(group) { return Err(ShackleError::InvalidGroup); } let path = group_git_dir(group).join(repo_name).with_extension("git"); - - Repository::init_opts( - &path, - &RepositoryInitOptions::new() - .bare(true) - .mode(RepositoryInitMode::SHARED_GROUP) - .mkdir(true) - .no_reinit(true), - )?; - Ok(GitInitResult { path }) + let mut init_opts = RepositoryInitOptions::new(); + init_opts + .bare(true) + .mode(RepositoryInitMode::SHARED_GROUP) + .mkdir(true) + .no_reinit(true); + + Ok((path, init_opts)) } - fn init_personal(repo_name: &str) -> Result<GitInitResult, ShackleError> { + fn init_personal_opts( + repo_name: &str, + ) -> Result<(PathBuf, RepositoryInitOptions), ShackleError> { let path = personal_git_dir()?.join(repo_name).with_extension("git"); + let mut init_opts = RepositoryInitOptions::new(); + init_opts.bare(true).mkdir(true).no_reinit(true); - Repository::init_opts( - &path, - &RepositoryInitOptions::new() - .bare(true) - .mkdir(true) - .no_reinit(true), - )?; - Ok(GitInitResult { path }) + Ok((path, init_opts)) } - match group { - Some(group) => init_group(repo_name, group), - None => init_personal(repo_name), + let (path, mut init_opts) = match group { + Some(group) => init_group_opts(repo_name, group)?, + None => init_personal_opts(repo_name)?, + }; + if let Some(description) = description { + init_opts.description(description); } + + Repository::init_opts(&path, &init_opts)?; + Ok(GitInitResult { path }) } pub struct RepoMetadata { |