aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-scanner-engine/src
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2017-09-11 17:13:16 +0200
committerJulien HENRY <julien.henry@sonarsource.com>2017-09-15 08:51:08 +0200
commit1de512a131f84fb1b6656150347d2b075b478780 (patch)
tree577caa9c9b3d56763e298cec5b286dd31178ff5e /sonar-scanner-engine/src
parentf76f82c6ef66e60e4986521d141514763e5c405a (diff)
downloadsonarqube-1de512a131f84fb1b6656150347d2b075b478780.tar.gz
sonarqube-1de512a131f84fb1b6656150347d2b075b478780.zip
SONAR-9223 Properly handle case when SONAR_USER_HOME point to a symlink
Diffstat (limited to 'sonar-scanner-engine/src')
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java11
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/GlobalTempFolderProviderTest.java15
2 files changed, 22 insertions, 4 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java
index 5b6de50c622..8be618a3e4b 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java
@@ -44,7 +44,7 @@ public class GlobalTempFolderProvider extends ProviderAdapter implements Compone
private static final long CLEAN_MAX_AGE = TimeUnit.DAYS.toMillis(21);
static final String TMP_NAME_PREFIX = ".sonartmp_";
private boolean started = false;
-
+
private System2 system;
private DefaultTempFolder tempFolder;
@@ -66,7 +66,6 @@ public class GlobalTempFolderProvider extends ProviderAdapter implements Compone
Path home = findSonarHome(bootstrapProps);
workingPath = home.resolve(workingPath).normalize();
}
-
try {
cleanTempFolders(workingPath);
} catch (IOException e) {
@@ -80,7 +79,11 @@ public class GlobalTempFolderProvider extends ProviderAdapter implements Compone
private static Path createTempFolder(Path workingPath) {
try {
- Files.createDirectories(workingPath);
+ Path realPath = workingPath;
+ if (Files.isSymbolicLink(realPath)) {
+ realPath = realPath.toRealPath();
+ }
+ Files.createDirectories(realPath);
} catch (IOException e) {
throw new IllegalStateException("Failed to create working path: " + workingPath, e);
}
@@ -160,7 +163,7 @@ public class GlobalTempFolderProvider extends ProviderAdapter implements Compone
@Override
public void dispose(PicoContainer container) {
- //nothing to do
+ // nothing to do
}
@Override
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/GlobalTempFolderProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/GlobalTempFolderProviderTest.java
index 5585545241b..4e99cdb8b4a 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/GlobalTempFolderProviderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/GlobalTempFolderProviderTest.java
@@ -48,6 +48,7 @@ public class GlobalTempFolderProviderTest {
@Test
public void createTempFolderProps() throws Exception {
File workingDir = temp.newFolder();
+ workingDir.delete();
TempFolder tempFolder = tempFolderProvider.provide(new GlobalProperties(ImmutableMap.of(CoreProperties.GLOBAL_WORKING_DIRECTORY, workingDir.getAbsolutePath())));
tempFolder.newDir();
@@ -127,6 +128,20 @@ public class GlobalTempFolderProviderTest {
assertThat(newFile.getParentFile().getName()).startsWith(".sonartmp_");
}
+ @Test
+ public void homeIsSymbolicLink() throws IOException {
+ File realSonarHome = temp.newFolder();
+ File symlink = temp.newFolder();
+ symlink.delete();
+ Files.createSymbolicLink(symlink.toPath(), realSonarHome.toPath());
+ GlobalProperties globalProperties = new GlobalProperties(ImmutableMap.of("sonar.userHome", symlink.getAbsolutePath()));
+
+ TempFolder tempFolder = tempFolderProvider.provide(globalProperties);
+ File newFile = tempFolder.newFile();
+ assertThat(newFile.getParentFile().getParentFile().getAbsolutePath()).isEqualTo(symlink.getAbsolutePath());
+ assertThat(newFile.getParentFile().getName()).startsWith(".sonartmp_");
+ }
+
private File getCreatedTempDir(File workingDir) {
assertThat(workingDir).isDirectory();
assertThat(workingDir.listFiles()).hasSize(1);