diff --git a/src/Models/CommitLink.cs b/src/Models/CommitLink.cs
index ae2cdf85..537612ac 100644
--- a/src/Models/CommitLink.cs
+++ b/src/Models/CommitLink.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
namespace SourceGit.Models
{
@@ -75,32 +76,31 @@ namespace SourceGit.Models
baseUrl => $"{baseUrl}/commit/"
)
};
- ///
- /// translate remotes to CommitLink-s . TODO: rename
- ///
- ///
- ///
+
+ ///
+ /// Attempts to create a CommitLink for a given remote by matching a provider.
+ ///
+ private static CommitLink? TryCreateCommitLink(Remote remote)
+ {
+ if (!remote.TryGetVisitURL(out var url))
+ return null;
+ var provider = Providers.FirstOrDefault(p => p.IsMatch(url));
+ if (provider.Name == null)
+ return null;
+ string repoName = provider.ExtractRepo(url);
+ return new CommitLink($"{provider.Name} ({repoName})", provider.BuildCommitUrlPrefix(url));
+ }
+
+ ///
+ /// Translates remotes to CommitLinks. TODO: rename
+ ///
public static List Get(List remotes)
{
- var outs = new List();
-
- foreach (var remote in remotes)
- {
- if (remote.TryGetVisitURL(out var url))
- {
- foreach (var provider in Providers)
- {
- if (provider.IsMatch(url))
- {
- string repoName = provider.ExtractRepo(url);
- outs.Add(new CommitLink($"{provider.Name} ({repoName})", provider.BuildCommitUrlPrefix(url)));
- break;
- }
- }
- }
- }
-
- return outs;
+ return remotes
+ .Select(TryCreateCommitLink)
+ .Where(cl => cl != null)
+ .Cast()
+ .ToList();
}
}
}