From 7eed36852efd6c4fbe6c24ce9e0bb8fc0d503415 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Fri, 1 Feb 2013 17:19:13 +0100 Subject: [PATCH] SONAR-2291 Allow to configure Sonar user home directory --- .../sonar/batch/bootstrap/BatchSonarCache.java | 17 ++++++++++++----- .../java/org/sonar/batch/cache/SonarCache.java | 16 ++++++++++++---- .../org/sonar/batch/cache/SonarCacheTest.java | 2 +- .../main/java/org/sonar/api/CoreProperties.java | 3 ++- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSonarCache.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSonarCache.java index ea2ba927304..d656c21c447 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSonarCache.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSonarCache.java @@ -19,6 +19,7 @@ */ package org.sonar.batch.bootstrap; +import org.apache.commons.lang.StringUtils; import org.sonar.api.CoreProperties; import org.sonar.api.config.Settings; import org.sonar.api.task.TaskExtension; @@ -36,12 +37,18 @@ public class BatchSonarCache implements TaskExtension { } public void start() { - String cacheLocation = settings.getString(CoreProperties.CACHE_LOCATION); - SonarCache.Builder builder = SonarCache.create(); - if (cacheLocation != null) { - File cacheLocationFolder = new File(cacheLocation); - builder.setCacheLocation(cacheLocationFolder); + // Try to get Sonar user home from property + String sonarUserHome = settings.getString(CoreProperties.SONAR_USER_HOME_PROPERTY); + if (StringUtils.isBlank(sonarUserHome)) { + // Try to get Sonar user home from environment variable + sonarUserHome = settings.getString(CoreProperties.SONAR_USER_HOME); } + if (StringUtils.isBlank(sonarUserHome)) { + // Default + sonarUserHome = System.getProperty("user.home") + File.separator + ".sonar"; + } + + SonarCache.Builder builder = SonarCache.create(new File(sonarUserHome)); this.cache = builder.build(); } diff --git a/sonar-batch/src/main/java/org/sonar/batch/cache/SonarCache.java b/sonar-batch/src/main/java/org/sonar/batch/cache/SonarCache.java index 4ae8b950417..77499426727 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/cache/SonarCache.java +++ b/sonar-batch/src/main/java/org/sonar/batch/cache/SonarCache.java @@ -25,6 +25,7 @@ import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.sonar.api.utils.SonarException; import java.io.File; import java.io.FileInputStream; @@ -67,8 +68,13 @@ public class SonarCache { public static class Builder { + private File sonarUserHomeLocation; private File cacheLocation; + public Builder(File sonarUserHomeLocation) { + this.sonarUserHomeLocation = sonarUserHomeLocation; + } + public Builder setCacheLocation(File cacheLocation) { this.cacheLocation = cacheLocation; return this; @@ -76,8 +82,7 @@ public class SonarCache { public SonarCache build() { if (cacheLocation == null) { - File sonarHome = new File(System.getProperty("user.home"), ".sonar"); - return new SonarCache(new File(sonarHome, "cache")); + return new SonarCache(new File(sonarUserHomeLocation, "cache")); } else { return new SonarCache(cacheLocation); @@ -86,8 +91,11 @@ public class SonarCache { } - public static Builder create() { - return new Builder(); + public static Builder create(File sonarUserHomeLocation) { + if (sonarUserHomeLocation == null) { + throw new SonarException("Sonar user home directory should not be null"); + } + return new Builder(sonarUserHomeLocation); } /** diff --git a/sonar-batch/src/test/java/org/sonar/batch/cache/SonarCacheTest.java b/sonar-batch/src/test/java/org/sonar/batch/cache/SonarCacheTest.java index a20cbb45636..dce64ba75bb 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/cache/SonarCacheTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/cache/SonarCacheTest.java @@ -39,7 +39,7 @@ public class SonarCacheTest { @Before public void prepare() throws IOException { - cache = SonarCache.create().setCacheLocation(tempFolder.newFolder()).build(); + cache = SonarCache.create(tempFolder.newFolder()).build(); } @Test diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java b/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java index 458d186dfcd..57c69dd389a 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java @@ -379,7 +379,8 @@ public interface CoreProperties { /** * @since 3.5 */ - String CACHE_LOCATION = "sonar.cachePath"; + String SONAR_USER_HOME = "SONAR_USER_HOME"; + String SONAR_USER_HOME_PROPERTY = "sonar.userHome"; /** * @deprecated replaced in v3.4 by properties specific to languages, for example sonar.java.coveragePlugin -- 2.39.5