Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }
Пример #5
0
 /// <summary>
 /// Update cached approvals
 /// </summary>
 internal void SetApprovals(MergeRequestKey mrk, MergeRequestApprovalConfiguration approvals)
 {
     _approvals[mrk] = approvals;
 }