From 1a16df00b2dcf1b31d3a05fb41c0ba83301e22d7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Fri, 1 Feb 2019 11:06:11 +0100 Subject: [PATCH] SONAR-11626 Add BranchDao.updateBaseline --- .../org/sonar/db/component/BranchDao.java | 14 ++ .../org/sonar/db/component/BranchDto.java | 48 ++++++- .../org/sonar/db/component/BranchMapper.java | 3 + .../org/sonar/db/component/BranchMapper.xml | 36 +++-- .../org/sonar/db/component/BranchDaoTest.java | 123 ++++++++++++++++++ 5 files changed, 215 insertions(+), 9 deletions(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java index 5192cbc9ffa..6a9150d5196 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java @@ -63,6 +63,20 @@ public class BranchDao implements Dao { return mapper(dbSession).updateMainBranchName(projectUuid, newBranchKey, now); } + /** + * Update the baseline_analysis_uuid and baseline_manual columns, if: + * + * - the specified uuid exists + * - and the specified uuid corresponds to a long-living branch (including the main branch) + * - and the existing baseline_analysis_uuid and baseline_manual values are different + * + * @return the number of rows that were updated + */ + public int updateBaseline(DbSession dbSession, String uuid, String baselineAnalysisUuid, boolean baselineManual) { + long now = system2.now(); + return mapper(dbSession).updateBaseline(uuid, baselineAnalysisUuid, baselineManual, now); + } + public Optional selectByBranchKey(DbSession dbSession, String projectUuid, String key) { return selectByKey(dbSession, projectUuid, key, KeyType.BRANCH); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java index 51ee7539646..50313de242c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java @@ -88,6 +88,23 @@ public class BranchDto { @Nullable private byte[] pullRequestBinary; + /** + * The baseline analysis that marks the start of New Code Period. + * Either manually set by user, or else automatically set to the value computed during analysis. + * + * It may be null for projects which have never been analyzed since the column was introduced. + */ + @Nullable + private String baselineAnalysisUuid; + + /** + * Set to true if the user has manually specified a baseline analysis for the branch. + * + * It may be null for projects which have never been analyzed since the column was introduced. + */ + @Nullable + private Boolean baselineManual; + public String getUuid() { return uuid; } @@ -189,6 +206,31 @@ public class BranchDto { } } + @CheckForNull + public String getBaselineAnalysisUuid() { + return baselineAnalysisUuid; + } + + private BranchDto setBaselineAnalysisUuid(@Nullable String baselineAnalysisUuid) { + this.baselineAnalysisUuid = baselineAnalysisUuid; + return this; + } + + public boolean isBaselineManual() { + return this.baselineManual != null && this.baselineManual; + } + + private BranchDto setBaselineManual(@Nullable Boolean baselineManual) { + this.baselineManual = baselineManual != null && baselineManual; + return this; + } + + public BranchDto setBaseline(@Nullable String baselineAnalysisUuid, @Nullable Boolean baselineManual) { + this.baselineAnalysisUuid = baselineAnalysisUuid; + this.baselineManual = baselineManual; + return this; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -202,7 +244,9 @@ public class BranchDto { Objects.equals(projectUuid, branchDto.projectUuid) && Objects.equals(kee, branchDto.kee) && branchType == branchDto.branchType && - Objects.equals(mergeBranchUuid, branchDto.mergeBranchUuid); + Objects.equals(mergeBranchUuid, branchDto.mergeBranchUuid) && + Objects.equals(baselineAnalysisUuid, branchDto.baselineAnalysisUuid) && + baselineManual == branchDto.baselineManual; } @Override @@ -219,6 +263,8 @@ public class BranchDto { sb.append(", keyType=").append(keyType); sb.append(", branchType=").append(branchType); sb.append(", mergeBranchUuid='").append(mergeBranchUuid).append('\''); + sb.append(", baselineAnalysisUuid='").append(baselineAnalysisUuid).append('\''); + sb.append(", baselineManual=").append(baselineManual); sb.append('}'); return sb.toString(); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java index 141d8a1e2cf..330e62c817a 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java @@ -31,6 +31,9 @@ public interface BranchMapper { int updateMainBranchName(@Param("projectUuid") String projectUuid, @Param("newBranchName") String newBranchName, @Param("now") long now); + int updateBaseline(@Param("uuid") String uuid, @Param("baselineAnalysisUuid") String baselineAnalysisUuid, + @Param("baselineManual") boolean baselineManual, @Param("now") long now); + BranchDto selectByKey(@Param("projectUuid") String projectUuid, @Param("key") String key, @Param("keyType") KeyType keyType); BranchDto selectByUuid(@Param("uuid") String uuid); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml index 2aac8665742..1db234d143b 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml @@ -9,7 +9,9 @@ pb.key_type as keyType, pb.branch_type as branchType, pb.merge_branch_uuid as mergeBranchUuid, - pb.pull_request_binary as pullRequestBinary + pb.pull_request_binary as pullRequestBinary, + pb.baseline_analysis_uuid as baselineAnalysisUuid, + pb.baseline_manual as baselineManual @@ -21,6 +23,8 @@ branch_type, merge_branch_uuid, pull_request_binary, + baseline_analysis_uuid, + baseline_manual, created_at, updated_at ) values ( @@ -31,6 +35,8 @@ #{dto.branchType, jdbcType=VARCHAR}, #{dto.mergeBranchUuid, jdbcType=VARCHAR}, #{dto.pullRequestBinary, jdbcType=BINARY}, + #{dto.baselineAnalysisUuid, jdbcType=VARCHAR}, + #{dto.baselineManual, jdbcType=BOOLEAN}, #{now, jdbcType=BIGINT}, #{now, jdbcType=BIGINT} ) @@ -45,23 +51,37 @@ uuid = #{projectUuid, jdbcType=VARCHAR} + + update project_branches + set + baseline_analysis_uuid = #{baselineAnalysisUuid, jdbcType=VARCHAR}, + baseline_manual = #{baselineManual, jdbcType=BOOLEAN}, + updated_at = #{now, jdbcType=BIGINT} + where + uuid = #{uuid, jdbcType=VARCHAR} + and branch_type = 'LONG' + and (baseline_analysis_uuid is null + or baseline_analysis_uuid != #{baselineAnalysisUuid, jdbcType=VARCHAR} + or baseline_manual != #{baselineManual, jdbcType=BOOLEAN}) + + update project_branches set - merge_branch_uuid = #{dto.mergeBranchUuid, jdbcType=VARCHAR}, - pull_request_binary = #{dto.pullRequestBinary, jdbcType=BINARY}, - updated_at = #{now, jdbcType=BIGINT} + merge_branch_uuid = #{dto.mergeBranchUuid, jdbcType=VARCHAR}, + pull_request_binary = #{dto.pullRequestBinary, jdbcType=BINARY}, + updated_at = #{now, jdbcType=BIGINT} where - uuid = #{dto.uuid, jdbcType=VARCHAR} + uuid = #{dto.uuid, jdbcType=VARCHAR}