1
1
using System ;
2
2
using System . Collections . Generic ;
3
- using System . Text . RegularExpressions ;
4
3
5
4
namespace SourceGit . Models
6
5
{
7
- public partial class CommitLink
6
+ public class CommitLink
8
7
{
9
8
public string Name { get ; set ; } = null ;
10
9
public string URLPrefix { get ; set ; } = null ;
@@ -15,35 +14,35 @@ public CommitLink(string name, string prefix)
15
14
URLPrefix = prefix ;
16
15
}
17
16
18
- [ GeneratedRegex ( @"^(http|https)://[^/]*gitlab[^/]*(:[0-9]+)?.*$" ) ]
19
- private static partial Regex REG_GITLAB ( ) ;
20
-
21
17
public static List < CommitLink > Get ( List < Remote > remotes )
22
18
{
23
19
var outs = new List < CommitLink > ( ) ;
24
20
25
21
foreach ( var remote in remotes )
26
22
{
27
- if ( remote . TryGetVisitURL ( out var url ) )
23
+ if ( remote . TryGetVisitURL ( out var link ) )
28
24
{
29
- var trimmedUrl = url . AsSpan ( ) ;
30
- if ( url . EndsWith ( ".git" ) )
31
- trimmedUrl = url . AsSpan ( 0 , url . Length - 4 ) ;
25
+ if ( link . EndsWith ( ".git" ) )
26
+ link = link . Substring ( 0 , link . Length - 4 ) ;
27
+
28
+ var uri = new Uri ( link , UriKind . Absolute ) ;
29
+ var host = uri . Host ;
30
+ var route = uri . AbsolutePath . TrimStart ( '/' ) ;
32
31
33
- if ( url . StartsWith ( "https:// github.com/ ", StringComparison . Ordinal ) )
34
- outs . Add ( new ( $ "GitHub ({ trimmedUrl [ 19 .. ] } )", $ "{ url } /commit/") ) ;
35
- else if ( REG_GITLAB ( ) . IsMatch ( url ) )
36
- outs . Add ( new ( $ "GitLab ({ trimmedUrl [ ( trimmedUrl [ 15 .. ] . IndexOf ( '/' ) + 16 ) .. ] } )", $ "{ url } /-/commit/") ) ;
37
- else if ( url . StartsWith ( "https:// gitee.com/ ", StringComparison . Ordinal ) )
38
- outs . Add ( new ( $ "Gitee ({ trimmedUrl [ 18 .. ] } )", $ "{ url } /commit/") ) ;
39
- else if ( url . StartsWith ( "https:// bitbucket.org/ ", StringComparison . Ordinal ) )
40
- outs . Add ( new ( $ "BitBucket ({ trimmedUrl [ 22 .. ] } )", $ "{ url } /commits/") ) ;
41
- else if ( url . StartsWith ( "https:// codeberg.org/ ", StringComparison . Ordinal ) )
42
- outs . Add ( new ( $ "Codeberg ({ trimmedUrl [ 21 .. ] } )", $ "{ url } /commit/") ) ;
43
- else if ( url . StartsWith ( "https:// gitea.org/ ", StringComparison . Ordinal ) )
44
- outs . Add ( new ( $ "Gitea ({ trimmedUrl [ 18 .. ] } )", $ "{ url } /commit/") ) ;
45
- else if ( url . StartsWith ( "https://git.sr.ht/ ", StringComparison . Ordinal ) )
46
- outs . Add ( new ( $ "sourcehut ({ trimmedUrl [ 18 .. ] } )", $ "{ url } /commit/") ) ;
32
+ if ( host . Equals ( " github.com", StringComparison . Ordinal ) )
33
+ outs . Add ( new ( $ "GitHub ({ route } )", $ "{ link } /commit/") ) ;
34
+ else if ( host . Contains ( "gitlab" , StringComparison . Ordinal ) )
35
+ outs . Add ( new ( $ "GitLab ({ route } )", $ "{ link } /-/commit/") ) ;
36
+ else if ( host . Equals ( " gitee.com", StringComparison . Ordinal ) )
37
+ outs . Add ( new ( $ "Gitee ({ route } )", $ "{ link } /commit/") ) ;
38
+ else if ( host . Equals ( " bitbucket.org", StringComparison . Ordinal ) )
39
+ outs . Add ( new ( $ "BitBucket ({ route } )", $ "{ link } /commits/") ) ;
40
+ else if ( host . Equals ( " codeberg.org", StringComparison . Ordinal ) )
41
+ outs . Add ( new ( $ "Codeberg ({ route } )", $ "{ link } /commit/") ) ;
42
+ else if ( host . Equals ( " gitea.org", StringComparison . Ordinal ) )
43
+ outs . Add ( new ( $ "Gitea ({ route } )", $ "{ link } /commit/") ) ;
44
+ else if ( host . Equals ( "github.com ", StringComparison . Ordinal ) )
45
+ outs . Add ( new ( $ "sourcehut ({ route } )", $ "{ link } /commit/") ) ;
47
46
}
48
47
}
49
48
0 commit comments