diff options
Diffstat (limited to 'sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java')
-rw-r--r-- | sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java new file mode 100644 index 00000000000..60b87a1fc0a --- /dev/null +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java @@ -0,0 +1,73 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.scanner.scm; + +import java.nio.file.Path; +import java.util.Collection; +import javax.annotation.CheckForNull; +import org.picocontainer.annotations.Nullable; +import org.picocontainer.injectors.ProviderAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.sonar.api.batch.fs.internal.InputModuleHierarchy; +import org.sonar.api.batch.scm.ScmBranchProvider; +import org.sonar.api.batch.scm.ScmProvider; +import org.sonar.scanner.scan.branch.BranchConfiguration; + +public class ScmChangedFilesProvider extends ProviderAdapter { + private static final Logger LOG = LoggerFactory.getLogger(ScmChangedFilesProvider.class); + + private ScmChangedFiles scmBranchChangedFiles; + + /* + * ScmConfiguration is not available in issues mode + */ + public ScmChangedFiles provide(@Nullable ScmConfiguration scmConfiguration, BranchConfiguration branchConfiguration, InputModuleHierarchy inputModuleHierarchy) { + if (scmBranchChangedFiles == null) { + if (scmConfiguration == null) { + scmBranchChangedFiles = new ScmChangedFiles(null); + } else { + Path rootBaseDir = inputModuleHierarchy.root().getBaseDir(); + Collection<Path> changedFiles = loadChangedFilesIfNeeded(scmConfiguration, branchConfiguration, rootBaseDir); + scmBranchChangedFiles = new ScmChangedFiles(changedFiles); + } + } + return scmBranchChangedFiles; + } + + @CheckForNull + private static Collection<Path> loadChangedFilesIfNeeded(ScmConfiguration scmConfiguration, BranchConfiguration branchConfiguration, Path rootBaseDir) { + if (branchConfiguration.isShortLivingBranch()) { + ScmProvider scmProvider = scmConfiguration.provider(); + if (scmProvider != null && (scmProvider instanceof ScmBranchProvider)) { + ScmBranchProvider scmBranchProvider = (ScmBranchProvider) scmProvider; + Collection<Path> changedFiles = scmBranchProvider.branchChangedFiles(branchConfiguration.branchTarget(), rootBaseDir); + if (changedFiles != null) { + LOG.debug("SCM reported {} files changed in the branch", changedFiles.size()); + return changedFiles; + } + } + + LOG.debug("SCM information about changed files in the branch is not available"); + } + return null; + } + +} |