log("Excluded tests: ", testExclusions);
}
+ public boolean hasPattern() {
+ return mainInclusions.length > 0 || mainExclusions.length > 0 || testInclusions.length > 0 || testExclusions.length > 0;
+ }
+
private void log(String title, PathPattern[] patterns) {
if (patterns.length > 0) {
LOG.info(title);
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.sonar.api.BatchComponent;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.InputFile;
*/
public class FileIndexer implements BatchComponent {
+ private static final Logger LOG = LoggerFactory.getLogger(FileIndexer.class);
+
private static final IOFileFilter DIR_FILTER = FileFilterUtils.and(HiddenFileFilter.VISIBLE, FileFilterUtils.notFileFilter(FileFilterUtils.prefixFileFilter(".")));
private static final IOFileFilter FILE_FILTER = HiddenFileFilter.VISIBLE;
waitForTasksToComplete();
progressReport.stop(progress.count() + " files indexed");
+
+ if (exclusionFilters.hasPattern()) {
+ LOG.info(progress.excludedByPatternsCount() + " files ignored because of inclusion/exclusion patterns");
+ }
}
private void waitForTasksToComplete() {
inputFile.setModuleBaseDir(fileSystem.baseDirPath());
if (exclusionFilters.accept(inputFile, type)) {
indexFile(inputFileBuilder, fileSystem, progress, inputFile, type);
+ } else {
+ progress.increaseExcludedByPatternsCount();
}
}
}
private class Progress {
private final Set<Path> indexed = new HashSet<>();
+ private int excludedByPatternsCount = 0;
synchronized void markAsIndexed(InputFile inputFile) {
if (indexed.contains(inputFile.path())) {
progressReport.message(indexed.size() + " files indexed... (last one was " + inputFile.relativePath() + ")");
}
+ void increaseExcludedByPatternsCount() {
+ excludedByPatternsCount++;
+ }
+
+ public int excludedByPatternsCount() {
+ return excludedByPatternsCount;
+ }
+
int count() {
return indexed.size();
}
File srcDir = new File(baseDir, "src");
srcDir.mkdir();
- String duplicatedStuff = "Sample xoo\nfoo\n";
+ String duplicatedStuff = "Sample xoo\n";
int blockCount = 10000;
File xooFile1 = new File(srcDir, "sample.xoo");
for (int i = 0; i < blockCount; i++) {
FileUtils.write(xooFile1, duplicatedStuff, true);
- FileUtils.write(xooFile1, "" + i, true);
+ FileUtils.write(xooFile1, "" + i + "\n", true);
}
TaskResult result = tester.newTask()
assertThat(result.inputFiles()).hasSize(4);
}
+ @Test
+ public void fileInclusionsExclusions() throws IOException {
+ File srcDir = new File(baseDir, "src");
+ srcDir.mkdir();
+
+ File xooFile = new File(srcDir, "sample.xoo");
+ FileUtils.write(xooFile, "Sample xoo\ncontent");
+
+ File xooFile2 = new File(baseDir, "another.xoo");
+ FileUtils.write(xooFile2, "Sample xoo 2\ncontent");
+
+ File testDir = new File(baseDir, "test");
+ testDir.mkdir();
+
+ File xooTestFile = new File(baseDir, "sampleTest2.xoo");
+ FileUtils.write(xooTestFile, "Sample test xoo\ncontent");
+
+ File xooTestFile2 = new File(testDir, "sampleTest.xoo");
+ FileUtils.write(xooTestFile2, "Sample test xoo 2\ncontent");
+
+ TaskResult result = tester.newTask()
+ .properties(builder
+ .put("sonar.sources", "src,another.xoo")
+ .put("sonar.tests", "test,sampleTest2.xoo")
+ .put("sonar.inclusions", "src/**")
+ .put("sonar.exclusions", "**/another.*")
+ .put("sonar.test.inclusions", "**/sampleTest*.*")
+ .put("sonar.test.exclusions", "**/sampleTest2.xoo")
+ .build())
+ .start();
+
+ assertThat(result.inputFiles()).hasSize(2);
+ }
+
@Test
public void failForDuplicateInputFile() throws IOException {
File srcDir = new File(baseDir, "src");