tgstation-server 5.12.7
The /tg/station 13 server suite
Loading...
Searching...
No Matches
GitRemoteFeaturesBase.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Threading;
4using System.Threading.Tasks;
5
6using Microsoft.Extensions.Logging;
7
10
12{
17 {
19 public abstract string TestMergeRefSpecFormatter { get; }
20
22 public abstract string TestMergeLocalBranchNameFormatter { get; }
23
25 public abstract RemoteGitProvider? RemoteGitProvider { get; }
26
28 public abstract string RemoteRepositoryOwner { get; }
29
31 public abstract string RemoteRepositoryName { get; }
32
36 protected ILogger<GitRemoteFeaturesBase> Logger { get; }
37
41 readonly Dictionary<TestMergeParameters, Models.TestMerge> cachedLookups;
42
48 public GitRemoteFeaturesBase(ILogger<GitRemoteFeaturesBase> logger, Uri remoteUrl)
49 {
50 Logger = logger ?? throw new ArgumentNullException(nameof(logger));
51 ArgumentNullException.ThrowIfNull(remoteUrl);
52
53 cachedLookups = new Dictionary<TestMergeParameters, Models.TestMerge>();
54 }
55
57 public async Task<Models.TestMerge> GetTestMerge(
58 TestMergeParameters parameters,
59 RepositorySettings repositorySettings,
60 CancellationToken cancellationToken)
61 {
62 ArgumentNullException.ThrowIfNull(parameters);
63 ArgumentNullException.ThrowIfNull(repositorySettings);
64
65 Models.TestMerge result;
66 lock (cachedLookups)
67 if (cachedLookups.TryGetValue(parameters, out result))
68 Logger.LogTrace("Using cache for test merge #{0}", parameters.Number);
69
70 if (result == null)
71 {
72 Logger.LogTrace("Retrieving metadata for test merge #{0}...", parameters.Number);
73 result = await GetTestMergeImpl(parameters, repositorySettings, cancellationToken);
74 lock (cachedLookups)
75 if (!cachedLookups.TryAdd(parameters, result))
76 Logger.LogError("Race condition on adding test merge #{0}!", parameters.Number);
77 }
78
79 return result;
80 }
81
89 protected abstract Task<Models.TestMerge> GetTestMergeImpl(
90 TestMergeParameters parameters,
91 RepositorySettings repositorySettings,
92 CancellationToken cancellationToken);
93 }
94}
Represents configurable settings for a git repository.
Parameters for creating a TestMerge.
int Number
The number of the test merge source.
readonly Dictionary< TestMergeParameters, Models.TestMerge > cachedLookups
Cache of created Models.TestMerges.
abstract Task< Models.TestMerge > GetTestMergeImpl(TestMergeParameters parameters, RepositorySettings repositorySettings, CancellationToken cancellationToken)
Implementation of GetTestMerge(TestMergeParameters, RepositorySettings, CancellationToken).
abstract string RemoteRepositoryOwner
If RemoteGitProvider is not RemoteGitProvider.Unknown this will be set with the owner of the reposito...
abstract string RemoteRepositoryName
If RemoteGitProvider is not RemoteGitProvider.Unknown this will be set with the name of the repositor...
GitRemoteFeaturesBase(ILogger< GitRemoteFeaturesBase > logger, Uri remoteUrl)
Initializes a new instance of the GitRemoteFeaturesBase class.
async Task< Models.TestMerge > GetTestMerge(TestMergeParameters parameters, RepositorySettings repositorySettings, CancellationToken cancellationToken)
Retrieve the Models.TestMerge representation of given test merge parameters . A Task<TResult> resulti...
ILogger< GitRemoteFeaturesBase > Logger
The ILogger for the GitRemoteFeaturesBase.
abstract string TestMergeRefSpecFormatter
Gets a formatter string which creates the remote refspec for fetching the HEAD of passed in test merg...
RemoteGitProvider
Indicates the remote git host.