From: Guillaume Jambet Date: Thu, 7 Jun 2018 13:17:48 +0000 (+0200) Subject: SONAR-10782 delete stale pull requests at the end of an analysis (#336) X-Git-Tag: 7.5~1072 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4b95ba35055b4177816a4857fad6413ea12def73;p=sonarqube.git SONAR-10782 delete stale pull requests at the end of an analysis (#336) --- diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java index 1270cdde241..0c8316a92e8 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeDao.java @@ -78,7 +78,7 @@ public class PurgeDao implements Dao { } LOG.debug("<- Purge stale branches"); - List branchUuids = mapper.selectStaleShortLivingBranches(rootUuid, dateToLong(maxDate.get())); + List branchUuids = mapper.selectStaleShortLivingBranchesAndPullRequests(rootUuid, dateToLong(maxDate.get())); for (String branchUuid : branchUuids) { deleteRootComponent(branchUuid, mapper, commands); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java index bbf0be4b2d2..510377605fa 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeMapper.java @@ -80,7 +80,7 @@ public interface PurgeMapper { List selectOldClosedIssueKeys(@Param("projectUuid") String projectUuid, @Nullable @Param("toDate") Long toDate); - List selectStaleShortLivingBranches(@Param("mainBranchProjectUuid") String mainBranchProjectUuid, @Param("toDate") Long toDate); + List selectStaleShortLivingBranchesAndPullRequests(@Param("mainBranchProjectUuid") String mainBranchProjectUuid, @Param("toDate") Long toDate); void deleteIssuesFromKeys(@Param("keys") List keys); 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 b1657baf79b..3216e49cf64 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 @@ -46,14 +46,14 @@ and not exists(select e.id from events e where e.analysis_uuid=s.uuid) - select pb.uuid from project_branches pb where pb.project_uuid=#{mainBranchProjectUuid,jdbcType=VARCHAR} - and pb.branch_type='SHORT' + and (pb.branch_type='SHORT' or pb.branch_type='PULL_REQUEST') and pb.updated_at < #{toDate} 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 e40a4b59d28..75530fc4871 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 @@ -136,6 +136,32 @@ public class PurgeDaoTest { assertThat(getUuidsInTableProjects()).containsOnly(project.uuid(), longBranch.uuid(), recentShortBranch.uuid()); } + @Test + public void purge_inactive_pull_request() { + when(system2.now()).thenReturn(new Date().getTime()); + RuleDefinitionDto rule = dbTester.rules().insert(); + ComponentDto project = dbTester.components().insertMainBranch(); + ComponentDto longBranch = dbTester.components().insertProjectBranch(project); + ComponentDto recentPullRequest = dbTester.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.PULL_REQUEST)); + + // pull request with other components and issues, updated 31 days ago + when(system2.now()).thenReturn(DateUtils.addDays(new Date(), -31).getTime()); + ComponentDto pullRequest = dbTester.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.PULL_REQUEST)); + ComponentDto module = dbTester.components().insertComponent(newModuleDto(pullRequest)); + ComponentDto subModule = dbTester.components().insertComponent(newModuleDto(module)); + ComponentDto file = dbTester.components().insertComponent(newFileDto(subModule)); + dbTester.issues().insert(rule, pullRequest, file); + dbTester.issues().insert(rule, pullRequest, subModule); + dbTester.issues().insert(rule, pullRequest, module); + + // back to present + when(system2.now()).thenReturn(new Date().getTime()); + underTest.purge(dbSession, newConfigurationWith30Days(system2, project.uuid()), PurgeListener.EMPTY, new PurgeProfiler()); + dbSession.commit(); + + assertThat(getUuidsInTableProjects()).containsOnly(project.uuid(), longBranch.uuid(), recentPullRequest.uuid()); + } + @Test public void shouldDeleteHistoricalDataOfDirectoriesAndFiles() { dbTester.prepareDbUnit(getClass(), "shouldDeleteHistoricalDataOfDirectoriesAndFiles.xml");