Skip to content

Commit

Permalink
JENKINS-38604: limit copying of files to types *.java and *.class, im…
Browse files Browse the repository at this point in the history
…prove logging
  • Loading branch information
mheinzerling committed Mar 14, 2017
1 parent 7d70a21 commit d771e0b
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 18 deletions.
18 changes: 9 additions & 9 deletions src/main/java/hudson/plugins/jacoco/JacocoPublisher.java
Expand Up @@ -446,7 +446,7 @@ public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath filePath, @Nonnull

logger.println("[JaCoCo plugin] " + execPattern + ";" + classPattern + ";" + sourcePattern + ";" + " locations are configured");

JacocoReportDir dir = new JacocoReportDir(run.getRootDir());
JacocoReportDir reportDir = new JacocoReportDir(run.getRootDir());

if (run instanceof AbstractBuild) {
execPattern = resolveFilePaths((AbstractBuild<?,?>) run, taskListener, execPattern);
Expand All @@ -455,22 +455,22 @@ public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath filePath, @Nonnull
List<FilePath> matchedExecFiles = Arrays.asList(filePath.list(resolveFilePaths(run, taskListener, execPattern, env)));
logger.println("[JaCoCo plugin] Number of found exec files for pattern " + execPattern + ": " + matchedExecFiles.size());
logger.print("[JaCoCo plugin] Saving matched execfiles: ");
dir.addExecFiles(matchedExecFiles);
reportDir.addExecFiles(matchedExecFiles);
logger.print(" " + Util.join(matchedExecFiles," "));
FilePath[] matchedClassDirs = resolveDirPaths(filePath, taskListener, classPattern);
logger.print("\n[JaCoCo plugin] Saving matched class directories for class-pattern: " + classPattern + ": ");
for (FilePath file : matchedClassDirs) {
dir.saveClassesFrom(file);
logger.print(" " + file);
for (FilePath dir : matchedClassDirs) {
int copied = reportDir.saveClassesFrom(dir, "**/*.class");
logger.print("\n[JaCoCo plugin] - " + dir + " " + copied + " files");
}

// Use skipCopyOfSrcFiles flag to determine if the source files should be copied or skipped. If skipped display appropriate logger message.
if(!this.skipCopyOfSrcFiles) {
FilePath[] matchedSrcDirs = resolveDirPaths(filePath, taskListener, sourcePattern);
logger.print("\n[JaCoCo plugin] Saving matched source directories for source-pattern: " + sourcePattern + ": ");
for (FilePath file : matchedSrcDirs) {
dir.saveSourcesFrom(file);
logger.print(" " + file);
for (FilePath dir : matchedSrcDirs) {
int copied = reportDir.saveSourcesFrom(dir, "**/*.java");
logger.print("\n[JaCoCo plugin] - " + dir + " " + copied + " files");
}
}
else{
Expand All @@ -491,7 +491,7 @@ public void perform(@Nonnull Run<?, ?> run, @Nonnull FilePath filePath, @Nonnull
logger.println("[JaCoCo plugin] exclusions: " + Arrays.toString(excludes));
}

final JacocoBuildAction action = JacocoBuildAction.load(run, healthReports, taskListener, dir, includes, excludes);
final JacocoBuildAction action = JacocoBuildAction.load(run, healthReports, taskListener, reportDir, includes, excludes);
action.getThresholds().ensureValid();
logger.println("[JaCoCo plugin] Thresholds: " + action.getThresholds());
run.addAction(action);
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/hudson/plugins/jacoco/JacocoReportDir.java
Expand Up @@ -6,6 +6,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;

/**
* Encapsulates the directory structure in $JENKINS_HOME where we store jacoco related files.
Expand All @@ -26,10 +27,10 @@ public File getClassesDir() {
return new File(root,"classes");
}

public void saveClassesFrom(FilePath dir) throws IOException, InterruptedException {
public int saveClassesFrom(@Nonnull FilePath dir, @Nonnull String fileMask) throws IOException, InterruptedException {
FilePath d = new FilePath(getClassesDir());
d.mkdirs();
dir.copyRecursiveTo(d);
return dir.copyRecursiveTo(fileMask, d);
}

/**
Expand All @@ -39,10 +40,10 @@ public File getSourcesDir() {
return new File(root,"sources");
}

public void saveSourcesFrom(FilePath dir) throws IOException, InterruptedException {
public int saveSourcesFrom(@Nonnull FilePath dir, @Nonnull String fileMask) throws IOException, InterruptedException {
FilePath d = new FilePath(getSourcesDir());
d.mkdirs();
dir.copyRecursiveTo(d);
return dir.copyRecursiveTo(fileMask, d);
}

/**
Expand Down
39 changes: 34 additions & 5 deletions src/test/java/hudson/plugins/jacoco/JacocoPublisherTest.java
Expand Up @@ -3,18 +3,22 @@
import hudson.EnvVars;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.*;
import hudson.model.AbstractBuild;
import hudson.model.Action;
import hudson.model.Result;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.jacoco.report.ClassReport;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Publisher;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicReference;

import hudson.plugins.jacoco.report.ClassReport;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Publisher;
import org.apache.commons.io.FileUtils;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
Expand Down Expand Up @@ -385,4 +389,29 @@ public void testSkipCopyOfSrcFilesFalse() throws IOException, InterruptedExcepti
assertTrue(jacocoSrc.exists() && jacocoSrc.isDirectory());
verify(taskListener, run);
}

@Test
public void testCopyClassAndSource() throws IOException, InterruptedException {

final Run run = new RunBuilder().taskListener(taskListener).build();
FilePath workspace = new WorkspaceBuilder().name("workspace", ".tst")
.file("classes/Test.class")
.file("classes/Test.jar")
.file("classes/sub/Test2.class")
.file("src/main/java/Test.java")
.file("src/main/java/test.png")
.build();

JacocoPublisher publisher = new JacocoPublisher();
publisher.setClassPattern("**/classes");
publisher.perform(run, workspace, launcher, taskListener);

assertTrue(new File(run.getRootDir(), "jacoco/classes/Test.class").exists());
assertFalse(new File(run.getRootDir(), "jacoco/classes/Test.jar").exists());
assertTrue(new File(run.getRootDir(), "jacoco/classes/sub/Test2.class").exists());
assertFalse(new File(run.getRootDir(), "jacoco/classes/Test2.class").exists());
assertTrue(new File(run.getRootDir(), "jacoco/sources/Test.java").exists());
assertFalse(new File(run.getRootDir(), "jacoco/sources/test.png").exists());
verify(taskListener, run);
}
}

0 comments on commit d771e0b

Please sign in to comment.