diff options
author | Michal Duda <michal.duda@sonarsource.com> | 2020-12-02 13:02:05 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2020-12-03 20:06:38 +0000 |
commit | 94db5278d13749bc20bc98e9cd6c9e44d3798249 (patch) | |
tree | a4853f9775d7c5c28b93c662cbb8eb1d0fd50d1f /server/sonar-db-dao | |
parent | 5247366b809f2836b29be0a555a8ce000b639c0e (diff) | |
download | sonarqube-94db5278d13749bc20bc98e9cd6c9e44d3798249.tar.gz sonarqube-94db5278d13749bc20bc98e9cd6c9e44d3798249.zip |
SONAR-14024 fix not purging some pull requests
Diffstat (limited to 'server/sonar-db-dao')
-rw-r--r-- | server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml | 2 | ||||
-rw-r--r-- | server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java | 39 |
2 files changed, 30 insertions, 11 deletions
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml index 828a957dae3..e2e04898f38 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/purge/PurgeMapper.xml @@ -57,7 +57,7 @@ and s.islast=${_true} where pb.project_uuid=#{projectUuid,jdbcType=VARCHAR} - and pb.exclude_from_purge = ${_false} + and (pb.branch_type = 'PULL_REQUEST' or pb.exclude_from_purge = ${_false}) and (s.created_at is null or s.created_at < #{toDate}) </select> diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java index db459e897fd..1c94f954b0c 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java @@ -143,27 +143,36 @@ public class PurgeDaoTest { ComponentDto project = db.components().insertPublicProject(); ComponentDto branch1 = db.components().insertProjectBranch(project); ComponentDto branch2 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.BRANCH)); + ComponentDto pr1 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.PULL_REQUEST)); + db.components().insertSnapshot(branch1); db.components().insertSnapshot(branch2); + db.components().insertSnapshot(pr1); // branch with other components and issues, last analysed 31 days ago - ComponentDto branch3 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.BRANCH)); - db.components().insertSnapshot(branch3, dto -> dto.setCreatedAt(DateUtils.addDays(new Date(), -31).getTime())); - - ComponentDto module = db.components().insertComponent(newModuleDto(branch3)); - ComponentDto subModule = db.components().insertComponent(newModuleDto(module)); - ComponentDto file = db.components().insertComponent(newFileDto(subModule)); - db.issues().insert(rule, branch3, file); - db.issues().insert(rule, branch3, subModule); - db.issues().insert(rule, branch3, module); + ComponentDto branch3 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.BRANCH).setExcludeFromPurge(false)); + addComponentsSnapshotsAndIssuesToBranch(branch3, rule, 31); // branch with no analysis ComponentDto branch4 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.BRANCH)); + // branch last analysed 31 days ago but protected from purge + ComponentDto branch5 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.BRANCH).setExcludeFromPurge(true)); + db.components().insertSnapshot(branch5, dto -> dto.setCreatedAt(DateUtils.addDays(new Date(), -31).getTime())); + + // pull request last analysed 100 days ago + ComponentDto pr2 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.PULL_REQUEST).setExcludeFromPurge(false)); + addComponentsSnapshotsAndIssuesToBranch(pr2, rule, 100); + + // pull request last analysed 100 days ago but marked as "excluded from purge" which should not work for pull requests + ComponentDto pr3 = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.PULL_REQUEST).setExcludeFromPurge(true)); + addComponentsSnapshotsAndIssuesToBranch(pr3, rule, 100); + underTest.purge(dbSession, newConfigurationWith30Days(System2.INSTANCE, project.uuid(), project.uuid()), PurgeListener.EMPTY, new PurgeProfiler()); dbSession.commit(); - assertThat(uuidsIn("components")).containsOnly(project.uuid(), branch1.uuid(), branch2.uuid()); + assertThat(uuidsIn("components")).containsOnly( + project.uuid(), branch1.uuid(), branch2.uuid(), branch5.uuid(), pr1.uuid()); assertThat(uuidsIn("projects")).containsOnly(project.uuid()); } @@ -1773,4 +1782,14 @@ public class PurgeDaoTest { .map(t -> (String) t.get("UUID")); } + private void addComponentsSnapshotsAndIssuesToBranch(ComponentDto branch, RuleDefinitionDto rule, int branchAge) { + db.components().insertSnapshot(branch, dto -> dto.setCreatedAt(DateUtils.addDays(new Date(), -branchAge).getTime())); + ComponentDto module = db.components().insertComponent(newModuleDto(branch)); + ComponentDto subModule = db.components().insertComponent(newModuleDto(module)); + ComponentDto file = db.components().insertComponent(newFileDto(subModule)); + db.issues().insert(rule, branch, file); + db.issues().insert(rule, branch, subModule); + db.issues().insert(rule, branch, module); + } + } |