From 3ced2b7fd222f41a4d6cbd1068e4e5e35022bbc9 Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 30 Jul 2025 12:05:14 +0800 Subject: [PATCH] code_review: PR #1635 Signed-off-by: leo --- src/Models/CommitLink.cs | 45 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/Models/CommitLink.cs b/src/Models/CommitLink.cs index a260cb7b..fd322492 100644 --- a/src/Models/CommitLink.cs +++ b/src/Models/CommitLink.cs @@ -1,10 +1,9 @@ using System; using System.Collections.Generic; -using System.Text.RegularExpressions; namespace SourceGit.Models { - public partial class CommitLink + public class CommitLink { public string Name { get; set; } = null; public string URLPrefix { get; set; } = null; @@ -15,35 +14,35 @@ namespace SourceGit.Models URLPrefix = prefix; } - [GeneratedRegex(@"^(http|https)://[^/]*gitlab[^/]*(:[0-9]+)?.*$")] - private static partial Regex REG_GITLAB(); - public static List Get(List remotes) { var outs = new List(); foreach (var remote in remotes) { - if (remote.TryGetVisitURL(out var url)) + if (remote.TryGetVisitURL(out var link)) { - var trimmedUrl = url.AsSpan(); - if (url.EndsWith(".git")) - trimmedUrl = url.AsSpan(0, url.Length - 4); + if (link.EndsWith(".git")) + link = link.Substring(0, link.Length - 4); - if (url.StartsWith("https://github.com/", StringComparison.Ordinal)) - outs.Add(new($"GitHub ({trimmedUrl[19..]})", $"{url}/commit/")); - else if (REG_GITLAB().IsMatch(url)) - outs.Add(new($"GitLab ({trimmedUrl[(trimmedUrl[15..].IndexOf('/') + 16)..]})", $"{url}/-/commit/")); - else if (url.StartsWith("https://gitee.com/", StringComparison.Ordinal)) - outs.Add(new($"Gitee ({trimmedUrl[18..]})", $"{url}/commit/")); - else if (url.StartsWith("https://bitbucket.org/", StringComparison.Ordinal)) - outs.Add(new($"BitBucket ({trimmedUrl[22..]})", $"{url}/commits/")); - else if (url.StartsWith("https://codeberg.org/", StringComparison.Ordinal)) - outs.Add(new($"Codeberg ({trimmedUrl[21..]})", $"{url}/commit/")); - else if (url.StartsWith("https://gitea.org/", StringComparison.Ordinal)) - outs.Add(new($"Gitea ({trimmedUrl[18..]})", $"{url}/commit/")); - else if (url.StartsWith("https://git.sr.ht/", StringComparison.Ordinal)) - outs.Add(new($"sourcehut ({trimmedUrl[18..]})", $"{url}/commit/")); + var uri = new Uri(link, UriKind.Absolute); + var host = uri.Host; + var route = uri.AbsolutePath.TrimStart('/'); + + if (host.Equals("github.com", StringComparison.Ordinal)) + outs.Add(new($"GitHub ({route})", $"{link}/commit/")); + else if (host.Contains("gitlab", StringComparison.Ordinal)) + outs.Add(new($"GitLab ({route})", $"{link}/-/commit/")); + else if (host.Equals("gitee.com", StringComparison.Ordinal)) + outs.Add(new($"Gitee ({route})", $"{link}/commit/")); + else if (host.Equals("bitbucket.org", StringComparison.Ordinal)) + outs.Add(new($"BitBucket ({route})", $"{link}/commits/")); + else if (host.Equals("codeberg.org", StringComparison.Ordinal)) + outs.Add(new($"Codeberg ({route})", $"{link}/commit/")); + else if (host.Equals("gitea.org", StringComparison.Ordinal)) + outs.Add(new($"Gitea ({route})", $"{link}/commit/")); + else if (host.Equals("github.com", StringComparison.Ordinal)) + outs.Add(new($"sourcehut ({route})", $"{link}/commit/")); } }