aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorMichal Duda <michal.duda@sonarsource.com>2020-12-02 13:02:05 +0100
committersonartech <sonartech@sonarsource.com>2020-12-03 20:06:38 +0000
commit94db5278d13749bc20bc98e9cd6c9e44d3798249 (patch)
treea4853f9775d7c5c28b93c662cbb8eb1d0fd50d1f /server/sonar-db-dao
parent5247366b809f2836b29be0a555a8ce000b639c0e (diff)
downloadsonarqube-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.xml2
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/purge/PurgeDaoTest.java39
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 &lt; #{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);
+ }
+
}