tgstation-server 6.1.4
The /tg/station 13 server suite
Loading...
Searching...
No Matches
GitRemoteFeaturesFactory.cs
Go to the documentation of this file.
1using System;
2
3using Microsoft.Extensions.Logging;
4
7
9{
12 {
17
21 readonly ILoggerFactory loggerFactory;
22
26 readonly ILogger<GitRemoteFeaturesFactory> logger;
27
36 ILoggerFactory loggerFactory,
37 ILogger<GitRemoteFeaturesFactory> logger)
38 {
39 this.gitHubServiceFactory = gitHubServiceFactory ?? throw new ArgumentNullException(nameof(gitHubServiceFactory));
40 this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
41 this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
42 }
43
46 {
47 ArgumentNullException.ThrowIfNull(repository);
48
49 var primaryRemote = repository.Origin;
50 var remoteGitProvider = ParseRemoteGitProviderFromOrigin(primaryRemote);
51 return remoteGitProvider switch
52 {
53 RemoteGitProvider.GitHub => new GitHubRemoteFeatures(
55 loggerFactory.CreateLogger<GitHubRemoteFeatures>(),
56 primaryRemote),
57 RemoteGitProvider.GitLab => new GitLabRemoteFeatures(
58 loggerFactory.CreateLogger<GitLabRemoteFeatures>(),
59 primaryRemote),
60 RemoteGitProvider.Unknown => new DefaultGitRemoteFeatures(),
61 _ => throw new InvalidOperationException($"Unknown RemoteGitProvider: {remoteGitProvider}!"),
62 };
63 }
64
67 {
68 ArgumentNullException.ThrowIfNull(origin);
69
70 switch (origin.Host.ToUpperInvariant())
71 {
72 case "GITHUB.COM":
73 case "WWW.GITHUB.COM":
74 case "GIT.GITHUB.COM":
75 return RemoteGitProvider.GitHub;
76 case "GITLAB.COM":
77 case "WWW.GITLAB.COM":
78 case "GIT.GITLAB.COM":
79 return RemoteGitProvider.GitLab;
80 default:
81 logger.LogDebug("Unknown git remote: {origin}", origin);
82 return RemoteGitProvider.Unknown;
83 }
84 }
85 }
86}
RemoteGitProvider ParseRemoteGitProviderFromOrigin(Uri origin)
Gets the RemoteGitProvider for a given origin . The RemoteGitProvider of the origin .
readonly ILoggerFactory loggerFactory
The ILoggerFactory for the GitRemoteFeaturesFactory.
readonly ILogger< GitRemoteFeaturesFactory > logger
The ILogger for the GitRemoteFeaturesFactory.
GitRemoteFeaturesFactory(IGitHubServiceFactory gitHubServiceFactory, ILoggerFactory loggerFactory, ILogger< GitRemoteFeaturesFactory > logger)
Initializes a new instance of the GitRemoteFeaturesFactory class.
IGitRemoteFeatures CreateGitRemoteFeatures(IRepository repository)
Create the IGitRemoteFeatures for a given repository . A new IGitRemoteFeatures instance.
readonly IGitHubServiceFactory gitHubServiceFactory
The IGitHubServiceFactory for the GitRemoteFeaturesFactory.
Represents an on-disk git repository.
Definition: IRepository.cs:14
Uri Origin
The current origin remote the IRepository is using.
Definition: IRepository.cs:33
RemoteGitProvider
Indicates the remote git host.