diff options
author | Dan Davison <dandavison7@gmail.com> | 2021-08-20 21:13:51 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-20 21:13:51 -0700 |
commit | a60652a91d1ca560c109411ab5b579ba84427f48 (patch) | |
tree | f3e1c5aa806750123ebc6f2c723a412e6ba88e19 /src/features/hyperlinks.rs | |
parent | 4f6ab57023446c162fc09a1b514cbccaf68513fd (diff) | |
parent | cf686e93b500de9d7de2fe2f824ce94018cbec24 (diff) |
Merge pull request #694 from dandavison/693-remote-urls
Support `insteadOf` replacements in git remote URLs
Diffstat (limited to 'src/features/hyperlinks.rs')
-rw-r--r-- | src/features/hyperlinks.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/features/hyperlinks.rs b/src/features/hyperlinks.rs index bf0c2354..2d3ad3b0 100644 --- a/src/features/hyperlinks.rs +++ b/src/features/hyperlinks.rs @@ -1,11 +1,12 @@ use std::borrow::Cow; +use std::str::FromStr; use lazy_static::lazy_static; use regex::{Captures, Regex}; use crate::config::Config; use crate::features::OptionValueFunction; -use crate::git_config::{GitConfigEntry, GitRemoteRepo}; +use crate::git_config::{GitConfig, GitConfigEntry, GitRemoteRepo}; pub fn make_feature() -> Vec<(String, OptionValueFunction)> { builtin_feature!([ @@ -28,16 +29,30 @@ pub fn format_commit_line_with_osc8_commit_hyperlink<'a>( format_osc8_hyperlink(&commit_link_format.replace("{commit}", commit), commit) }) } else if let Some(GitConfigEntry::GitRemote(GitRemoteRepo::GitHubRepo(repo))) = - config.git_config_entries.get("remote.origin.url") + config.git_config.as_ref().and_then(get_remote_url) { COMMIT_LINE_REGEX.replace(line, |captures: &Captures| { - format_commit_line_captures_with_osc8_commit_hyperlink(captures, repo) + format_commit_line_captures_with_osc8_commit_hyperlink(captures, &repo) }) } else { Cow::from(line) } } +fn get_remote_url(git_config: &GitConfig) -> Option<GitConfigEntry> { + 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 to `path`, displaying `text`. pub fn format_osc8_file_hyperlink<'a>( relative_path: &'a str, |