From c54ddc4845d03d31f23b308c8eea7c5fed2f7ae8 Mon Sep 17 00:00:00 2001 From: heartacker Date: Wed, 30 Jul 2025 11:13:35 +0800 Subject: [PATCH] feature: self host GitLab URLs in CommitLink --- src/Models/CommitLink.cs | 8 ++++++-- src/Models/Remote.cs | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Models/CommitLink.cs b/src/Models/CommitLink.cs index 08caad8d1..a260cb7b7 100644 --- a/src/Models/CommitLink.cs +++ b/src/Models/CommitLink.cs @@ -1,9 +1,10 @@ using System; using System.Collections.Generic; +using System.Text.RegularExpressions; namespace SourceGit.Models { - public class CommitLink + public partial class CommitLink { public string Name { get; set; } = null; public string URLPrefix { get; set; } = null; @@ -14,6 +15,9 @@ public CommitLink(string name, string prefix) URLPrefix = prefix; } + [GeneratedRegex(@"^(http|https)://[^/]*gitlab[^/]*(:[0-9]+)?.*$")] + private static partial Regex REG_GITLAB(); + public static List Get(List remotes) { var outs = new List(); @@ -28,7 +32,7 @@ public static List Get(List remotes) if (url.StartsWith("https://github.com/", StringComparison.Ordinal)) outs.Add(new($"GitHub ({trimmedUrl[19..]})", $"{url}/commit/")); - else if (url.StartsWith("https://gitlab.", StringComparison.Ordinal)) + 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/")); diff --git a/src/Models/Remote.cs b/src/Models/Remote.cs index 6e36cfb9e..a2592215c 100644 --- a/src/Models/Remote.cs +++ b/src/Models/Remote.cs @@ -8,10 +8,13 @@ public partial class Remote { [GeneratedRegex(@"^https?://[^/]+/.+[^/\.]$")] private static partial Regex REG_HTTPS(); + [GeneratedRegex(@"^git://[^/]+/.+[^/\.]$")] private static partial Regex REG_GIT(); + [GeneratedRegex(@"^[\w\-]+@[\w\.\-]+(\:[0-9]+)?:([a-zA-z0-9~%][\w\-\./~%]*)?[a-zA-Z0-9](\.git)?$")] private static partial Regex REG_SSH1(); + [GeneratedRegex(@"^ssh://([\w\-]+@)?[\w\.\-]+(\:[0-9]+)?/([a-zA-z0-9~%][\w\-\./~%]*)?[a-zA-Z0-9](\.git)?$")] private static partial Regex REG_SSH2();