private int?selectMergeRequestFromList(List <MergeRequest> mergeRequests) { mergeRequests = Tools.Tools.FilterMergeRequests(mergeRequests, Settings); HostAndProjectId key = new HostAndProjectId { Host = State.HostName, ProjectId = State.Project.Id }; // if we remember MR selected for the given host/project before... if (_lastMergeRequestsByProjects.ContainsKey(key) // ... and if such MR still exists in a list of MRs && mergeRequests.Any((x) => x.IId == _lastMergeRequestsByProjects[key])) { return(_lastMergeRequestsByProjects[key]); } return(mergeRequests.Count > 0 ? mergeRequests[0].IId : new Nullable <int>()); }
async private Task switchMergeRequestAsync(int mergeRequestIId) { PreSwitchMergeRequest?.Invoke(mergeRequestIId); MergeRequest mergeRequest = new MergeRequest(); try { mergeRequest = await Operator.GetMergeRequestAsync(State.Project.Path_With_Namespace, mergeRequestIId); } catch (OperatorException ex) { bool cancelled = ex.InternalException is GitLabClientCancelled; if (cancelled) { Trace.TraceInformation(String.Format("[Workflow] Cancelled switch MR IID to {0}", mergeRequestIId.ToString())); return; // silent return } FailedSwitchMergeRequest?.Invoke(); throw new WorkflowException(String.Format("Cannot load merge request with IId {0}", mergeRequestIId)); } State.MergeRequest = mergeRequest; HostAndProjectId key = new HostAndProjectId { Host = State.HostName, ProjectId = State.Project.Id }; _lastMergeRequestsByProjects[key] = mergeRequestIId; PostSwitchMergeRequest?.Invoke(State); if (!await loadCommitsAsync()) { return; // silent return } await loadSystemNotesAsync(); }