From 411fd8ef5065c074b6889919c840a8eafab352d4 Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Wed, 15 Aug 2018 10:19:50 +0200 Subject: [PATCH] SONAR-11151 Only cache new lines from the report --- .../source/NewLinesRepository.java | 22 +++++++++++-------- .../source/NewLinesRepositoryTest.java | 3 +-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepository.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepository.java index 38e14292a97..fb3749491df 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepository.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepository.java @@ -38,7 +38,7 @@ public class NewLinesRepository { private final AnalysisMetadataHolder analysisMetadataHolder; private final ScmInfoRepository scmInfoRepository; private final PeriodHolder periodHolder; - private final Map>> changedLinesCache = new HashMap<>(); + private final Map>> reportChangedLinesCache = new HashMap<>(); public NewLinesRepository(BatchReportReader reportReader, AnalysisMetadataHolder analysisMetadataHolder, PeriodHolder periodHolder, ScmInfoRepository scmInfoRepository) { this.reportReader = reportReader; @@ -48,14 +48,10 @@ public class NewLinesRepository { } public boolean newLinesAvailable() { - return periodHolder.hasPeriod(); + return isPullRequestOrShortLivedBranch() || periodHolder.hasPeriod(); } public Optional> getNewLines(Component component) { - return changedLinesCache.computeIfAbsent(component, this::computeNewLines); - } - - private Optional> computeNewLines(Component component) { Optional> reportChangedLines = getChangedLinesFromReport(component); if (reportChangedLines.isPresent()) { return reportChangedLines; @@ -98,11 +94,19 @@ public class NewLinesRepository { } private Optional> getChangedLinesFromReport(Component component) { - if (analysisMetadataHolder.isPullRequest() || analysisMetadataHolder.isShortLivingBranch()) { - return reportReader.readComponentChangedLines(component.getReportAttributes().getRef()) - .map(c -> new HashSet<>(c.getLineList())); + if (isPullRequestOrShortLivedBranch()) { + return reportChangedLinesCache.computeIfAbsent(component, this::readFromReport); } return Optional.empty(); } + + private boolean isPullRequestOrShortLivedBranch() { + return analysisMetadataHolder.isPullRequest() || analysisMetadataHolder.isShortLivingBranch(); + } + + private Optional> readFromReport(Component component) { + return reportReader.readComponentChangedLines(component.getReportAttributes().getRef()) + .map(c -> new HashSet<>(c.getLineList())); + } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java index 2a02b3473a0..837b11a0592 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java @@ -56,7 +56,6 @@ public class NewLinesRepositoryTest { @Test public void load_new_lines_from_report_if_available_and_pullrequest() { - periodHolder.setPeriod(new Period("", null, Long.MAX_VALUE, "")); setPullRequest(); createChangedLinesInReport(1, 2, 5); @@ -80,7 +79,7 @@ public class NewLinesRepositoryTest { } @Test - public void return_empty_if_no_period() { + public void return_empty_if_no_period_and_not_pullrequest() { periodHolder.setPeriod(null); // even though we have lines in the report and scm data, nothing should be returned since we have no period -- 2.39.5