diff --git a/src/bin/git-solo.rs b/src/bin/git-solo.rs index 9abccd6..cc2baba 100644 --- a/src/bin/git-solo.rs +++ b/src/bin/git-solo.rs @@ -1,21 +1,12 @@ use git2::Repository; -use std::process; use std::fs::File; -use git_mob::{get_main_author, gitmessage_template_file_path}; +use git_mob::{get_main_author, gitmessage_template_file_path, with_repo_or_exit}; fn main() { let main_author = get_main_author(); println!("{}", main_author); - match Repository::open_from_env() { - Ok(repo) => { - truncate_gitmessage_template(repo); - } - Err(_e) => { - eprintln!("Not in a git repository"); - process::exit(1); - } - } + with_repo_or_exit(truncate_gitmessage_template); } fn truncate_gitmessage_template(repo: Repository) { diff --git a/src/lib.rs b/src/lib.rs index e55602e..9c13318 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,7 @@ use std::io::BufReader; use std::fs::File; use std::error::Error; use std::string::String; +use std::process; #[derive(Serialize, Deserialize, Clone, Debug)] pub struct Author { @@ -58,3 +59,13 @@ fn parse_coauthors_file() -> Result, Box> { pub fn gitmessage_template_file_path(repo: Repository) -> std::path::PathBuf { repo.path().join(".gitmessage") } + +pub fn with_repo_or_exit(f: F) { + match Repository::open_from_env() { + Ok(repo) => f(repo), + Err(_e) => { + eprintln!("Not in a git repository"); + process::exit(1); + } + } +}