Browse Source

SONAR-11606 Stop excluding directories starting with a dot

tags/7.6
Duarte Meneses 5 years ago
parent
commit
2a1bb3adb0

+ 14
- 2
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/AbstractProjectOrModule.java View File

@@ -22,6 +22,7 @@ package org.sonar.api.batch.fs.internal;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.util.Collections;
@@ -30,12 +31,15 @@ import java.util.Map;
import javax.annotation.CheckForNull;
import javax.annotation.concurrent.Immutable;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;

@Immutable
public abstract class AbstractProjectOrModule extends DefaultInputComponent {
private static final Logger LOGGER = Loggers.get(AbstractProjectOrModule.class);
private final Path baseDir;
private final Path workDir;
private final String name;
@@ -92,7 +96,15 @@ public abstract class AbstractProjectOrModule extends DefaultInputComponent {

private static Path initWorkingDir(ProjectDefinition module) {
File workingDirAsFile = module.getWorkDir();
return workingDirAsFile.getAbsoluteFile().toPath().normalize();
Path workingDir = workingDirAsFile.getAbsoluteFile().toPath().normalize();
if (SystemUtils.IS_OS_WINDOWS) {
try {
Files.setAttribute(workingDir, "dos:hidden", true, LinkOption.NOFOLLOW_LINKS);
} catch (IOException e) {
LOGGER.warn("Failed to set working directory hidden: {}", e.getMessage());
}
}
return workingDir;
}

/**

+ 12
- 1
sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputModuleTest.java View File

@@ -39,7 +39,7 @@ public class DefaultInputModuleTest {
public TemporaryFolder temp = new TemporaryFolder();

@Test
public void testGetters() throws IOException {
public void check_getters() throws IOException {
ProjectDefinition def = ProjectDefinition.create();
def.setKey("moduleKey");
File baseDir = temp.newFolder();
@@ -68,4 +68,15 @@ public class DefaultInputModuleTest {
assertThat(module.isFile()).isFalse();
}

@Test
public void working_directory_should_be_hidden() throws IOException {
ProjectDefinition def = ProjectDefinition.create();
File workDir = temp.newFolder(".sonar");
def.setWorkDir(workDir);
File baseDir = temp.newFolder();
def.setBaseDir(baseDir);
DefaultInputModule module = new DefaultInputModule(def);
assertThat(workDir.isHidden()).isTrue();
}

}

+ 17
- 7
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectFileIndexer.java View File

@@ -25,8 +25,10 @@ import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.DosFileAttributes;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
@@ -35,6 +37,7 @@ import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils;
import org.sonar.api.batch.fs.InputFile.Type;
import org.sonar.api.batch.fs.internal.DefaultInputModule;
import org.sonar.api.batch.fs.internal.InputModuleHierarchy;
@@ -190,12 +193,7 @@ public class ProjectFileIndexer {

@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
Path fileName = dir.getFileName();

if (fileName != null && fileName.toString().length() > 1 && fileName.toString().charAt(0) == '.') {
return FileVisitResult.SKIP_SUBTREE;
}
if (Files.isHidden(dir)) {
if (isHidden(dir)) {
return FileVisitResult.SKIP_SUBTREE;
}
return FileVisitResult.CONTINUE;
@@ -223,6 +221,18 @@ public class ProjectFileIndexer {
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
return FileVisitResult.CONTINUE;
}
}

private boolean isHidden(Path path) throws IOException {
if (SystemUtils.IS_OS_WINDOWS) {
try {
DosFileAttributes dosFileAttributes = Files.readAttributes(path, DosFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
return dosFileAttributes.isHidden();
} catch (UnsupportedOperationException e) {
return path.toFile().isHidden();
}
} else {
return Files.isHidden(path);
}
}
}
}

Loading…
Cancel
Save