From 2818e6d8ad8f0b1e8a80dacc38b295165c8f13a9 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Mon, 15 Aug 2022 20:03:21 -0400 Subject: [PATCH 1/2] Remove duplicate API reviews --- .../APIView/APIViewWeb/Repositories/PullRequestManager.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs b/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs index 806d8f2d421..3fda4b68c25 100644 --- a/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs +++ b/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs @@ -293,6 +293,14 @@ private async Task CreateRevisionIfRequired(CodeFile codeFile, var prevRevisionId = review.Revisions.Last().RevisionId; review = await GetBaseLineReview(codeFile.Language, codeFile.PackageName, pullRequestModel, true); review.ReviewId = pullRequestModel.ReviewId; + //Remove previous revisions with revision ID. + //Currently revision ID is getting duplicated when a PR api review is created for a brand new package. + //In case of brand new package, we don't have any baseline from automatic review. So it uses previous PR api review as baseline and + //below revision ID copy step makes duplicate revision IDs in such cases. + //We should ensure that no revision exists in review with previous revision ID before we update new revision + var revisionsToRetain = review.Revisions.Where(r => r.RevisionId != prevRevisionId); + review.Revisions.Clear(); + review.Revisions.AddRange(revisionsToRetain); newRevision.RevisionId = prevRevisionId; } } From c7deb5bd5aaa954e0ef315bf02b97c2dd663eeb7 Mon Sep 17 00:00:00 2001 From: praveenkuttappan Date: Tue, 16 Aug 2022 00:15:43 -0400 Subject: [PATCH 2/2] Update as per review comments --- .../APIView/APIViewWeb/Models/ReviewRevisionModelList.cs | 5 +++++ .../APIView/APIViewWeb/Repositories/PullRequestManager.cs | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dotnet/APIView/APIViewWeb/Models/ReviewRevisionModelList.cs b/src/dotnet/APIView/APIViewWeb/Models/ReviewRevisionModelList.cs index 1a59977998b..d78790e3a5c 100644 --- a/src/dotnet/APIView/APIViewWeb/Models/ReviewRevisionModelList.cs +++ b/src/dotnet/APIView/APIViewWeb/Models/ReviewRevisionModelList.cs @@ -36,6 +36,11 @@ public void AddRange(IEnumerable revisionModels) } } + public void RemoveAll(System.Predicate match) + { + _list.RemoveAll(match); + } + public void Clear() { _list.Clear(); diff --git a/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs b/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs index 3fda4b68c25..72ad8ed1b9e 100644 --- a/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs +++ b/src/dotnet/APIView/APIViewWeb/Repositories/PullRequestManager.cs @@ -298,9 +298,7 @@ private async Task CreateRevisionIfRequired(CodeFile codeFile, //In case of brand new package, we don't have any baseline from automatic review. So it uses previous PR api review as baseline and //below revision ID copy step makes duplicate revision IDs in such cases. //We should ensure that no revision exists in review with previous revision ID before we update new revision - var revisionsToRetain = review.Revisions.Where(r => r.RevisionId != prevRevisionId); - review.Revisions.Clear(); - review.Revisions.AddRange(revisionsToRetain); + review.Revisions.RemoveAll(r => r.RevisionId == prevRevisionId); newRevision.RevisionId = prevRevisionId; } }