Esempio n. 1
0
        public async Task <FileMatrix> Execute(GetFileMatrix query)
        {
            var matrix = await BuildMatrix(query);

            var q = from review in _session.Query <Review>()
                    join revision in _session.Query <ReviewRevision>() on review.RevisionId equals revision.Id
                    where revision.ReviewId == query.ReviewId
                    join user in _session.Query <ReviewUser>() on review.UserId equals user.Id
                    from file in review.Files
                    where file.Status == FileReviewStatus.Reviewed
                    select new
            {
                Revision = new RevisionId.Selected(revision.RevisionNumber),
                File     = file.File,
                Reviewer = user.UserName
            };

            foreach (var reviewedFile in q)
            {
                var entry = matrix.Single(x => x.Revisions[reviewedFile.Revision].File.NewPath == reviewedFile.File.NewPath);
                entry.Revisions[reviewedFile.Revision].Reviewers.Add(reviewedFile.Reviewer);
            }


            return(matrix);
        }
Esempio n. 2
0
        private async Task <FileMatrix> BuildMatrix(GetFileMatrix query)
        {
            var revisions = await _session.Query <ReviewRevision>()
                            .Where(x => x.ReviewId == query.ReviewId)
                            .FetchMany(x => x.Files)
                            .OrderBy(x => x.RevisionNumber)
                            .ToListAsync();

            var mergeRequest = await _api.GetMergeRequestInfo(query.ReviewId.ProjectId, query.ReviewId.ReviewId);

            var revisionIds = revisions.Select(x => (RevisionId) new RevisionId.Selected(x.RevisionNumber));

            var hasProvisional = !revisions.Any() || mergeRequest.HeadCommit != revisions.Last().HeadCommit;

            if (hasProvisional)
            {
                revisionIds = revisionIds.Union(new RevisionId.Hash(mergeRequest.HeadCommit));
            }

            var matrix = new FileMatrix(revisionIds);

            foreach (var revision in revisions)
            {
                matrix.Append(new RevisionId.Selected(revision.RevisionNumber), revision.Files);
            }

            if (hasProvisional)
            {
                var provisionalDiff = await _api.GetDiff(query.ReviewId.ProjectId, revisions.LastOrDefault()?.HeadCommit ?? mergeRequest.BaseCommit, mergeRequest.HeadCommit);

                var files = provisionalDiff.Select(RevisionFile.FromDiff);

                matrix.Append(new RevisionId.Hash(mergeRequest.HeadCommit), files);
            }

            matrix.FillUnchanged();
            return(matrix);
        }