From 3911968d1de7411bfd63a195d2c2e2e1df1db4f2 Mon Sep 17 00:00:00 2001 From: Shanbin Wang Date: Thu, 24 Sep 2015 16:02:15 -0700 Subject: [PATCH] Fix duplicate charts on Job page Also, remvoe deprecates and unnecessary exception handling blocks --- pom.xml | 2 +- .../scoverage/ScoverageBuildAction.java | 3 +- .../scoverage/ScoverageProjectAction.java | 7 +- .../plugins/scoverage/ScoveragePublisher.java | 107 +++++++----------- 4 files changed, 45 insertions(+), 74 deletions(-) diff --git a/pom.xml b/pom.xml index 8d3df8e..d4f1b91 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ scoverage - 1.2.1 + 1.2.2 Scoverage Plugin hpi http://wiki.jenkins-ci.org/display/JENKINS/Scoverage+Plugin diff --git a/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageBuildAction.java b/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageBuildAction.java index e540820..f27f623 100644 --- a/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageBuildAction.java +++ b/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageBuildAction.java @@ -32,7 +32,7 @@ public ScoverageBuildAction(Run run, FilePath buildPath, ScoverageResult r } public String getIconFileName() { - return Functions.getResourcePath()+"/plugin/scoverage/images/scoverage.png"; + return Functions.getResourcePath() + "/plugin/scoverage/images/scoverage.png"; } public String getDisplayName() { @@ -80,6 +80,5 @@ public DirectoryBrowserSupport doDynamic(StaplerRequest req, StaplerResponse rsp @Override public Collection getProjectActions() { return Collections.singleton(new ScoverageProjectAction(run.getParent())); - } } diff --git a/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageProjectAction.java b/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageProjectAction.java index affeb81..96f9a32 100644 --- a/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageProjectAction.java +++ b/src/main/java/org/jenkinsci/plugins/scoverage/ScoverageProjectAction.java @@ -23,13 +23,8 @@ public ScoverageProjectAction(Job job) { this.job = job; } - @Deprecated - public ScoverageProjectAction(AbstractProject project) { - this((Job) project); - } - public String getIconFileName() { - return Functions.getResourcePath()+"/plugin/scoverage/images/scoverage.png"; + return Functions.getResourcePath() + "/plugin/scoverage/images/scoverage.png"; } public String getDisplayName() { diff --git a/src/main/java/org/jenkinsci/plugins/scoverage/ScoveragePublisher.java b/src/main/java/org/jenkinsci/plugins/scoverage/ScoveragePublisher.java index be3c7ff..08736f9 100644 --- a/src/main/java/org/jenkinsci/plugins/scoverage/ScoveragePublisher.java +++ b/src/main/java/org/jenkinsci/plugins/scoverage/ScoveragePublisher.java @@ -3,7 +3,6 @@ import hudson.Extension; import hudson.FilePath; import hudson.Launcher; -import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.Action; import hudson.model.BuildListener; @@ -29,6 +28,7 @@ import java.io.FileReader; import java.io.IOException; import java.util.Collection; +import java.util.Collections; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -53,32 +53,19 @@ public String getReportFile() { return reportFile == null || reportFile.trim().length() == 0 ? "scoverage.xml" : reportFile; } - @Override - public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) - throws IOException, InterruptedException { - - listener.getLogger().println("Publishing Scoverage XML and HTML report ..."); - perform(build, build.getWorkspace(), launcher, listener); - - return true; - } - @Override public void perform(Run run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException { + listener.getLogger().println("Publishing Scoverage XML and HTML report ..."); + final File buildDir = run.getRootDir(); final FilePath buildPath = new FilePath(buildDir); final FilePath scovPath = workspace.child(reportDir); - try { - copyReport(scovPath, buildPath, new BuildListenerAdapter(listener)); - ScoverageResult result = processReport(run, buildPath); - run.addAction(new ScoverageBuildAction(run, buildPath, result)); - } catch (IOException e) { - listener.getLogger().println("Unable to copy scoverage report from " + scovPath + " to " + buildPath); - throw e; - } + copyReport(scovPath, buildPath, new BuildListenerAdapter(listener)); + ScoverageResult result = processReport(run, buildPath); + run.addAction(new ScoverageBuildAction(run, buildPath, result)); } private static final class ScovFinder implements FilePath.FileCallable { @@ -101,7 +88,7 @@ public boolean accept(File dir, String s) { return dir.isDirectory(); } }, TrueFileFilter.INSTANCE); - return list.iterator().next(); + return list == null ? null : list.iterator().next(); } @Override @@ -111,24 +98,20 @@ public void checkRoles(RoleChecker roleChecker) throws SecurityException { } private void copyReport(FilePath coverageDir, FilePath buildPath, BuildListener listener) - throws IOException, InterruptedException { - try { - if (coverageDir.exists()) { - // search index.html recursively and copy its parent tree - final FilePath indexPath = new FilePath(coverageDir.act(new ScovFinder())); + throws IOException, InterruptedException { + if (coverageDir.exists()) { + final FilePath toFile = buildPath.child(getReportFile()); + coverageDir.child(getReportFile()).copyTo(toFile); // copy XML report + // search index.html recursively and copy its parent tree + final FilePath indexPath = new FilePath(coverageDir.act(new ScovFinder())); + if (indexPath != null) { final FilePath indexDir = new FilePath(coverageDir.getChannel(), indexPath.getParent().getRemote()); - final FilePath toFile = buildPath.child(getReportFile()); indexDir.copyRecursiveTo(buildPath.child(ActionUrls.BUILD_URL.toString())); // copy HTML report - coverageDir.child(getReportFile()).copyTo(toFile); // copy XML report } else { - throw new IOException(coverageDir.getRemote() + " not exists"); + listener.getLogger().println("Unable to find HTML reports under " + coverageDir.getRemote()); } - } catch (IOException e) { - listener.getLogger().println(e.getMessage()); - throw e; - } catch (InterruptedException e) { - listener.getLogger().println(e.getMessage()); - throw e; + } else { + throw new IOException(coverageDir.getRemote() + " not exists"); } } @@ -136,37 +119,31 @@ private ScoverageResult processReport(Run build, FilePath path) throws IOE String[] ext = {"html"}; double statement = 0; double condition = 0; - try { - // Fix HTML reports to use relative href - Collection list = FileUtils.listFiles(new File(path.toURI()), ext, true); - for (File f : list) { - String content = FileUtils.readFileToString(f); - String pattern = f.getParent().replaceAll(".*scoverage-report", "scoverage-report"); - String relativeFix = content.replaceAll("href=\"/", "href=\"") - .replaceAll("href=\".*" + pattern + "/", "href=\""); - FileUtils.writeStringToFile(f, relativeFix); + // Fix HTML reports to use relative href + Collection list = FileUtils.listFiles(new File(path.toURI()), ext, true); + for (File f : list) { + String content = FileUtils.readFileToString(f); + String pattern = f.getParent().replaceAll(".*scoverage-report", "scoverage-report"); + String relativeFix = content.replaceAll("href=\"/", "href=\"") + .replaceAll("href=\".*" + pattern + "/", "href=\""); + FileUtils.writeStringToFile(f, relativeFix); + } + // Parse scoverage.xml + File report = new File(path.child(reportFile).toURI()); + Pattern pattern = Pattern.compile("^.* statement-rate=\"(.+?)\" branch-rate=\"(.+?)\""); + BufferedReader in = new BufferedReader(new FileReader(report)); + String line; + while ((line = in.readLine()) != null) { + boolean found = false; + Matcher matcher = pattern.matcher(line); + while (matcher.find()) { + statement = Double.parseDouble(matcher.group(1)); + condition = Double.parseDouble(matcher.group(2)); + found = true; } - // Parse scoverage.xml - File report = new File(path.child(reportFile).toURI()); - Pattern pattern = Pattern.compile("^.* statement-rate=\"(.+?)\" branch-rate=\"(.+?)\""); - BufferedReader in = new BufferedReader(new FileReader(report)); - String line; - while ((line = in.readLine()) != null) { - boolean found = false; - Matcher matcher = pattern.matcher(line); - while (matcher.find()) { - statement = Double.parseDouble(matcher.group(1)); - condition = Double.parseDouble(matcher.group(2)); - found = true; - } - if (found) { - break; - } + if (found) { + break; } - } catch (IOException e) { - throw e; - } catch (InterruptedException e) { - throw e; } return new ScoverageResult(statement, condition, build.number); } @@ -207,8 +184,8 @@ public BuildStepMonitor getRequiredMonitorService() { } @Override - public Action getProjectAction(AbstractProject project) { - return new ScoverageProjectAction(project); + public Collection getProjectActions(AbstractProject project) { + return Collections.emptySet(); } }