From 9e3f5910fc5226d4e4d4f7aed87b42a049f6662e Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Fri, 3 Oct 2014 14:51:45 +0200 Subject: [PATCH] SONAR-5620 Fallback to use sonar.links.scm_dev property when no provider is detected --- .../org/sonar/batch/scm/ScmConfiguration.java | 55 +++++++++++++------ .../batch/mediumtest/scm/ScmMediumTest.java | 32 +++++++++++ 2 files changed, 70 insertions(+), 17 deletions(-) diff --git a/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java b/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java index ef95169f8be..fd96308fa43 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java @@ -65,31 +65,52 @@ public final class ScmConfiguration implements BatchComponent, Startable { } if (settings.hasKey(CoreProperties.SCM_PROVIDER_KEY)) { String forcedProviderKey = settings.getString(CoreProperties.SCM_PROVIDER_KEY); - if (providerPerKey.containsKey(forcedProviderKey)) { - this.provider = providerPerKey.get(forcedProviderKey); - } else { - throw new IllegalArgumentException("SCM provider was set to \"" + forcedProviderKey + "\" but no provider found for this key. Supported providers are " - + Joiner.on(",").join(providerPerKey.keySet())); - } + setProviderIfSupported(forcedProviderKey); } else { - // Autodetection - for (ScmProvider provider : providerPerKey.values()) { - if (provider.supports(projectReactor.getRoot().getBaseDir())) { - if (this.provider == null) { - this.provider = provider; - } else { - throw new IllegalStateException("SCM provider autodetection failed. Both " + this.provider.key() + " and " + provider.key() - + " claim to support this project. Please use " + CoreProperties.SCM_PROVIDER_KEY + " to define SCM of your project."); - } - } - } + autodetection(); if (this.provider == null) { + considerOldScmUrl(); LOG.warn("SCM provider autodetection failed. No SCM provider claims to support this project. Please use " + CoreProperties.SCM_PROVIDER_KEY + " to define SCM of your project."); } } } + private void setProviderIfSupported(String forcedProviderKey) { + if (providerPerKey.containsKey(forcedProviderKey)) { + this.provider = providerPerKey.get(forcedProviderKey); + } else { + throw new IllegalArgumentException("SCM provider was set to \"" + forcedProviderKey + "\" but no provider found for this key. Supported providers are " + + Joiner.on(",").join(providerPerKey.keySet())); + } + } + + private void considerOldScmUrl() { + if (settings.hasKey(CoreProperties.LINKS_SOURCES_DEV)) { + String url = settings.getString(CoreProperties.LINKS_SOURCES_DEV); + if (url.startsWith("scm:")) { + String[] split = url.split(":"); + if (split.length > 1) { + setProviderIfSupported(split[1]); + } + } + } + + } + + private void autodetection() { + for (ScmProvider provider : providerPerKey.values()) { + if (provider.supports(projectReactor.getRoot().getBaseDir())) { + if (this.provider == null) { + this.provider = provider; + } else { + throw new IllegalStateException("SCM provider autodetection failed. Both " + this.provider.key() + " and " + provider.key() + + " claim to support this project. Please use " + CoreProperties.SCM_PROVIDER_KEY + " to define SCM of your project."); + } + } + } + } + public ScmProvider provider() { return provider; } diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java index e169a347894..a1bd00935f3 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java @@ -90,6 +90,38 @@ public class ScmMediumTest { .withValue("1=julien;2=julien;3=julien;4=julien;5=simon")); } + @Test + public void configureUsingScmURL() throws IOException { + + File baseDir = prepareProject(); + + TaskResult result = tester.newTask() + .properties(ImmutableMap.builder() + .put("sonar.task", "scan") + .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) + .put("sonar.projectKey", "com.foo.project") + .put("sonar.projectName", "Foo Project") + .put("sonar.projectVersion", "1.0-SNAPSHOT") + .put("sonar.projectDescription", "Description of Foo Project") + .put("sonar.sources", "src") + .put("sonar.scm.enabled", "true") + .put("sonar.links.scm_dev", "scm:xoo:foobar") + .build()) + .start(); + + assertThat(result.measures()).hasSize(4); + + assertThat(result.measures()).contains(new DefaultMeasure() + .forMetric(CoreMetrics.LINES) + .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo")) + .withValue(5)); + + assertThat(result.measures()).contains(new DefaultMeasure() + .forMetric(CoreMetrics.SCM_AUTHORS_BY_LINE) + .onFile(new DefaultInputFile("com.foo.project", "src/sample.xoo")) + .withValue("1=julien;2=julien;3=julien;4=julien;5=simon")); + } + private File prepareProject() throws IOException { File baseDir = temp.newFolder(); File srcDir = new File(baseDir, "src"); -- 2.39.5