From 7ae9561756533e9391d0f26fdb17f150de1d1ee0 Mon Sep 17 00:00:00 2001 From: Constantin Nickel Date: Sun, 5 Mar 2023 11:52:55 +0100 Subject: [PATCH] Move remote url getter to `GitConfig` --- src/features/hyperlinks.rs | 21 ++++----------------- src/git_config/mod.rs | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/features/hyperlinks.rs b/src/features/hyperlinks.rs index aac32210e..118d83557 100644 --- a/src/features/hyperlinks.rs +++ b/src/features/hyperlinks.rs @@ -1,6 +1,5 @@ use std::borrow::Cow; use std::path::Path; -use std::str::FromStr; use lazy_static::lazy_static; use regex::{Captures, Regex}; @@ -33,8 +32,10 @@ pub fn format_commit_line_with_osc8_commit_hyperlink<'a>( format_osc8_hyperlink(&commit_link_format.replace("{commit}", commit), commit); format!("{prefix}{formatted_commit}{suffix}") }) - } else if let Some(GitConfigEntry::GitRemote(repo)) = - config.git_config.as_ref().and_then(get_remote_url) + } else if let Some(GitConfigEntry::GitRemote(repo)) = config + .git_config + .as_ref() + .and_then(GitConfig::get_remote_url) { COMMIT_LINE_REGEX.replace(line, |captures: &Captures| { format_commit_line_captures_with_osc8_commit_hyperlink(captures, &repo) @@ -44,20 +45,6 @@ pub fn format_commit_line_with_osc8_commit_hyperlink<'a>( } } -fn get_remote_url(git_config: &GitConfig) -> Option { - git_config - .repo - .as_ref()? - .find_remote("origin") - .ok()? - .url() - .and_then(|url| { - GitRemoteRepo::from_str(url) - .ok() - .map(GitConfigEntry::GitRemote) - }) -} - /// Create a file hyperlink, displaying `text`. pub fn format_osc8_file_hyperlink<'a, P>( absolute_path: P, diff --git a/src/git_config/mod.rs b/src/git_config/mod.rs index 7211b4a6e..8246df4a9 100644 --- a/src/git_config/mod.rs +++ b/src/git_config/mod.rs @@ -7,6 +7,7 @@ use regex::Regex; use std::collections::HashMap; #[cfg(test)] use std::path::Path; +use std::str::FromStr; use lazy_static::lazy_static; @@ -14,7 +15,7 @@ pub struct GitConfig { config: git2::Config, config_from_env_var: HashMap, pub enabled: bool, - pub repo: Option, + repo: Option, // To make GitConfig cloneable when testing (in turn to make Config cloneable): #[cfg(test)] path: std::path::PathBuf, @@ -95,6 +96,19 @@ impl GitConfig { } } + pub fn get_remote_url(&self) -> Option { + self.repo + .as_ref()? + .find_remote("origin") + .ok()? + .url() + .and_then(|url| { + GitRemoteRepo::from_str(url) + .ok() + .map(GitConfigEntry::GitRemote) + }) + } + pub fn for_each(&self, regex: &str, mut f: F) where F: FnMut(&str, Option<&str>),