async private Task loadApprovalsAsync(MergeRequestKey mrk) { MergeRequestApprovalConfiguration approvals = await call( () => _operator.GetApprovalsAsync(mrk.ProjectKey.ProjectName, mrk.IId), String.Format("Cancelled loading approvals for merge request with IId {0}", mrk.IId), String.Format("Cannot load approvals for merge request with IId {0}", mrk.IId)); _cacheUpdater.UpdateApprovals(mrk, approvals); }
/// <summary> /// Cache passed approval configurations /// </summary> internal void UpdateApprovals(MergeRequestKey mrk, MergeRequestApprovalConfiguration approvals) { if (approvals == null) { Debug.Assert(false); return; } _cache.SetApprovals(mrk, approvals); }
/// <summary> /// Convert a difference between two states into a list of merge request updates splitted in new/updated/closed /// </summary> private IEnumerable <UserEvents.MergeRequestEvent> getMergeRequestUpdates( TwoListDifference <MergeRequestWithProject> diff, IInternalCache oldDetails, IInternalCache newDetails) { List <UserEvents.MergeRequestEvent> updates = new List <UserEvents.MergeRequestEvent>(); foreach (MergeRequestWithProject mergeRequest in diff.SecondOnly) { FullMergeRequestKey fmk = new FullMergeRequestKey(mergeRequest.Project, mergeRequest.MergeRequest); updates.Add(new UserEvents.MergeRequestEvent( fmk, UserEvents.MergeRequestEvent.Type.AddedMergeRequest, null)); } foreach (MergeRequestWithProject mergeRequest in diff.FirstOnly) { FullMergeRequestKey fmk = new FullMergeRequestKey(mergeRequest.Project, mergeRequest.MergeRequest); updates.Add(new UserEvents.MergeRequestEvent( fmk, UserEvents.MergeRequestEvent.Type.RemovedMergeRequest, null)); } foreach (Tuple <MergeRequestWithProject, MergeRequestWithProject> mrPair in diff.Common) { MergeRequest mergeRequest1 = mrPair.Item1.MergeRequest; MergeRequest mergeRequest2 = mrPair.Item2.MergeRequest; Debug.Assert(mergeRequest1.Id == mergeRequest2.Id); MergeRequestKey mergeRequestKey = new MergeRequestKey(mrPair.Item2.Project, mergeRequest2.IId); IEnumerable <Version> oldVersions = oldDetails.GetVersions(mergeRequestKey); IEnumerable <Version> newVersions = newDetails.GetVersions(mergeRequestKey); bool labelsUpdated = !Enumerable.SequenceEqual(mergeRequest1.Labels, mergeRequest2.Labels); bool commitsUpdated = newVersions.Count() > oldVersions.Count(); MergeRequestApprovalConfiguration oldApprovals = oldDetails.GetApprovals(mergeRequestKey); MergeRequestApprovalConfiguration newApprovals = newDetails.GetApprovals(mergeRequestKey); bool detailsUpdated = areMergeRequestsDifferentInDetails(mergeRequest1, mergeRequest2) || areApprovalsDifferent(oldApprovals, newApprovals); if (labelsUpdated || commitsUpdated || detailsUpdated) { FullMergeRequestKey fmk = new FullMergeRequestKey( mergeRequestKey.ProjectKey, mergeRequest2); updates.Add(new UserEvents.MergeRequestEvent( fmk, UserEvents.MergeRequestEvent.Type.UpdatedMergeRequest, new UserEvents.MergeRequestEvent.UpdateScope(commitsUpdated, labelsUpdated, detailsUpdated))); } } return(updates); }
private bool areApprovalsDifferent(MergeRequestApprovalConfiguration approvals1, MergeRequestApprovalConfiguration approvals2) { if (approvals1 == null && approvals2 == null) { return(false); } else if (approvals1 == null || approvals2 == null) { return(true); } else if (approvals1 == approvals2) { return(false); } if (approvals1.Approved_By == null && approvals2.Approved_By != null) { return(true); } else if (approvals1.Approved_By != null && approvals2.Approved_By == null) { return(true); } else if (approvals1.Approved_By != null && approvals2.Approved_By != null) { var userIds1 = approvals1.Approved_By.Select(user => user.User.Id).OrderBy(id => id); var userIds2 = approvals2.Approved_By.Select(user => user.User.Id).OrderBy(id => id); if (!Enumerable.SequenceEqual(userIds1, userIds2)) { return(true); } } return(approvals1.Id != approvals2.Id || approvals1.Project_Id != approvals2.Project_Id || approvals1.Title != approvals2.Title || approvals1.Description != approvals2.Description || approvals1.State != approvals2.State || approvals1.Created_At != approvals2.Created_At || approvals1.Updated_At != approvals2.Updated_At || approvals1.Merge_Status != approvals2.Merge_Status || approvals1.Approvals_Required != approvals2.Approvals_Required || approvals1.Approvals_Left != approvals2.Approvals_Left); }
/// <summary> /// Update cached approvals /// </summary> internal void SetApprovals(MergeRequestKey mrk, MergeRequestApprovalConfiguration approvals) { _approvals[mrk] = approvals; }