From d5bb473bea89a2da7ba9dedab4ba146869b8195c Mon Sep 17 00:00:00 2001 From: Gerhard Olsson Date: Tue, 25 Aug 2020 22:51:55 +0200 Subject: [PATCH] Jenkins refactoring: Re# suggestions --- .../BuildServerWatcher.cs | 2 +- .../JenkinsIntegration/JenkinsAdapter.cs | 48 +++++++++---------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/GitUI/BuildServerIntegration/BuildServerWatcher.cs b/GitUI/BuildServerIntegration/BuildServerWatcher.cs index ea5d88a49b3..1a81f490ffd 100644 --- a/GitUI/BuildServerIntegration/BuildServerWatcher.cs +++ b/GitUI/BuildServerIntegration/BuildServerWatcher.cs @@ -97,7 +97,7 @@ public async Task LaunchBuildServerInfoFetchOperationAsync() { fullDayObservable.OnErrorResumeNext(fullObservable) .OnErrorResumeNext(Observable.Empty() - .DelaySubscription(TimeSpan.FromMinutes(1)) + .DelaySubscription(LongPollInterval) .OnErrorResumeNext(fromNowObservable) .Retry() .Repeat()) diff --git a/Plugins/BuildServerIntegration/JenkinsIntegration/JenkinsAdapter.cs b/Plugins/BuildServerIntegration/JenkinsIntegration/JenkinsAdapter.cs index 8fa3f222de0..5c41aaee59c 100644 --- a/Plugins/BuildServerIntegration/JenkinsIntegration/JenkinsAdapter.cs +++ b/Plugins/BuildServerIntegration/JenkinsIntegration/JenkinsAdapter.cs @@ -115,21 +115,21 @@ private void AddGetBuildUrl(string projectUrl) } } - public class ResponseInfo + private class ResponseInfo { public string Url { get; set; } public long Timestamp { get; set; } public IEnumerable JobDescription { get; set; } } - public class JenkinsCacheInfo + private class JenkinsCacheInfo { public long Timestamp = -1; } private async Task GetBuildInfoTaskAsync(string projectUrl, bool fullInfo, CancellationToken cancellationToken) { - string t = null; + string t; long timestamp = 0; IEnumerable s = Enumerable.Empty(); @@ -161,11 +161,13 @@ private async Task GetBuildInfoTaskAsync(string projectUrl, bool f { try { - if (j["lastBuild"] != null && j["lastBuild"]["timestamp"] != null) + if (j["lastBuild"] == null || j["lastBuild"]["timestamp"] == null) { - var ts = j["lastBuild"]["timestamp"]; - timestamp = Math.Max(timestamp, ts.ToObject()); + continue; } + + var ts = j["lastBuild"]["timestamp"]; + timestamp = Math.Max(timestamp, ts.ToObject()); } catch { @@ -194,28 +196,27 @@ public IObservable GetFinishedBuildsSince(IScheduler scheduler, DateT // GetBuilds() will return the same builds as for GetRunningBuilds(). // Multiple calls will fetch same info multiple times and make debugging very confusing // Similar as for AppVeyor + // 'sinceDate' is not supported in Jenkins API return Observable.Empty(); } public IObservable GetRunningBuilds(IScheduler scheduler) { - return GetBuilds(scheduler, null, true); + return GetBuilds(scheduler); } - private IObservable GetBuilds(IScheduler scheduler, DateTime? sinceDate = null, bool? running = null) + private IObservable GetBuilds(IScheduler scheduler) { return Observable.Create((observer, cancellationToken) => ThreadHelper.JoinableTaskFactory.RunAsync(async () => { await TaskScheduler.Default; - return scheduler.Schedule(() => ObserveBuilds(sinceDate, running, observer, cancellationToken)); + return scheduler.Schedule(() => ObserveBuilds(observer, cancellationToken)); }).Task); } - private void ObserveBuilds(DateTime? sinceDate, bool? running, IObserver observer, CancellationToken cancellationToken) + private void ObserveBuilds(IObserver observer, CancellationToken cancellationToken) { - // Note that 'running' is ignored (attempt to fetch data when updated) - // Similar for 'sinceDate', not supported in Jenkins API try { var allBuildInfos = new List>(); @@ -335,7 +336,7 @@ private void ObserveBuilds(DateTime? sinceDate, bool? running, IObserver builds) + static bool StatusIsBetter(BuildInfo buildInfo, ObjectId commit, Dictionary builds) { return @@ -429,7 +430,7 @@ private BuildInfo CreateBuildInfo(JObject buildDescription) return buildInfo; } - public static DateTime TimestampToDateTime(long timestamp) + private static DateTime TimestampToDateTime(long timestamp) { return new DateTime(1970, 1, 1, 0, 0, 0, DateTime.Now.Kind).AddMilliseconds(timestamp); } @@ -442,21 +443,16 @@ private static AuthenticationHeaderValue CreateBasicHeader(string username, stri private static BuildInfo.BuildStatus ParseBuildStatus(string statusValue) { - switch (statusValue) + return statusValue switch { - case "SUCCESS": - return BuildInfo.BuildStatus.Success; - case "FAILURE": - return BuildInfo.BuildStatus.Failure; - case "UNSTABLE": - return BuildInfo.BuildStatus.Unstable; - case "ABORTED": - return BuildInfo.BuildStatus.Stopped; + "SUCCESS" => BuildInfo.BuildStatus.Success, + "FAILURE" => BuildInfo.BuildStatus.Failure, + "UNSTABLE" => BuildInfo.BuildStatus.Unstable, + "ABORTED" => BuildInfo.BuildStatus.Stopped, // NOT_BUILT - default: - return BuildInfo.BuildStatus.Unknown; - } + _ => BuildInfo.BuildStatus.Unknown + }; } private async Task GetStreamAsync(string restServicePath, CancellationToken cancellationToken)