tgstation-server 5.18.0
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 ValueTask<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 ValueTask<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.
abstract ValueTask< Models.TestMerge > GetTestMergeImpl(TestMergeParameters parameters, RepositorySettings repositorySettings, CancellationToken cancellationToken)
Implementation of GetTestMerge(TestMergeParameters, RepositorySettings, CancellationToken).
readonly Dictionary< TestMergeParameters, Models.TestMerge > cachedLookups
Cache of created Models.TestMerges.
abstract string RemoteRepositoryOwner
If RemoteGitProvider is not RemoteGitProvider.Unknown this will be set with the owner of the reposito...
async ValueTask< Models.TestMerge > GetTestMerge(TestMergeParameters parameters, RepositorySettings repositorySettings, CancellationToken cancellationToken)
Retrieve the Models.TestMerge representation of given test merge parameters . A ValueTask<TResult> re...
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.
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.