diff --git a/src/main/java/hudson/tasks/junit/History.java b/src/main/java/hudson/tasks/junit/History.java index 172a4a668..644a59d80 100644 --- a/src/main/java/hudson/tasks/junit/History.java +++ b/src/main/java/hudson/tasks/junit/History.java @@ -24,6 +24,7 @@ package hudson.tasks.junit; import hudson.model.AbstractBuild; +import hudson.model.Job; import hudson.model.Run; import jenkins.model.Jenkins; import hudson.tasks.test.TestObject; @@ -69,10 +70,9 @@ public TestObject getTestObject() { } public boolean historyAvailable() { - if (testObject.getRun().getParent().getBuilds().size() > 1) - return true; - else - return false; + Job job = testObject.getRun().getParent(); + JobTestResultDisplayProperty settings = job.getProperty(JobTestResultDisplayProperty.class); + return (settings == null || !settings.getDisableHistoricalResults()) && job.getBuilds().size() > 1; } public List getList(int start, int end) { diff --git a/src/main/java/hudson/tasks/junit/JobTestResultDisplayProperty.java b/src/main/java/hudson/tasks/junit/JobTestResultDisplayProperty.java new file mode 100644 index 000000000..ad821151f --- /dev/null +++ b/src/main/java/hudson/tasks/junit/JobTestResultDisplayProperty.java @@ -0,0 +1,66 @@ +/* + * The MIT License + * + * Copyright 2016 SAP SE + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.tasks.junit; + +import hudson.Extension; +import hudson.model.Job; +import hudson.model.JobProperty; +import hudson.model.JobPropertyDescriptor; +import net.sf.json.JSONObject; +import org.kohsuke.stapler.StaplerRequest; + +/** + * + */ +public class JobTestResultDisplayProperty extends JobProperty> { + private final boolean disableHistoricalResults; + + public JobTestResultDisplayProperty(Boolean disableHistoricalResults) { + if ( disableHistoricalResults != null ) { + this.disableHistoricalResults = disableHistoricalResults; + } + else { + this.disableHistoricalResults = false; + } + } + + public boolean getDisableHistoricalResults() { + return disableHistoricalResults; + } + + @Extension + public static class DescriptorImpl extends JobPropertyDescriptor { + + @Override + public String getDisplayName() { + return null; + } + + @Override + public JobTestResultDisplayProperty newInstance(StaplerRequest req, JSONObject formData) { + if (formData.isNullObject()) return null; + return new JobTestResultDisplayProperty(formData.getBoolean("junitsettings-disableHistoricalResults")); + } + } +} diff --git a/src/main/java/hudson/tasks/junit/TestResultAction.java b/src/main/java/hudson/tasks/junit/TestResultAction.java index 75acbffcc..bc56339f4 100644 --- a/src/main/java/hudson/tasks/junit/TestResultAction.java +++ b/src/main/java/hudson/tasks/junit/TestResultAction.java @@ -199,6 +199,17 @@ public List getSkippedTests() { } + @Override + public boolean shouldCalculatePreviousResults() { + JobTestResultDisplayProperty settings = run.getParent().getProperty(JobTestResultDisplayProperty.class); + if ( settings != null ) { + return !settings.getDisableHistoricalResults(); + } + else { + return super.shouldCalculatePreviousResults(); + } + } + /** * Loads a {@link TestResult} from disk. */ diff --git a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java index 88b871922..42dde851d 100644 --- a/src/main/java/hudson/tasks/test/AbstractTestResultAction.java +++ b/src/main/java/hudson/tasks/test/AbstractTestResultAction.java @@ -183,6 +183,15 @@ public double getHealthScaleFactor() { return 1.0; } + /** + * Allows a particular job to disable scanning previous result history. + * + * @return if calculation of previous results should be done + */ + public boolean shouldCalculatePreviousResults() { + return true; + } + /** * Exposes this object to the remote API. */ diff --git a/src/main/java/hudson/tasks/test/TestResult.java b/src/main/java/hudson/tasks/test/TestResult.java index 317f0b745..e8375cfa2 100644 --- a/src/main/java/hudson/tasks/test/TestResult.java +++ b/src/main/java/hudson/tasks/test/TestResult.java @@ -137,6 +137,11 @@ public TestResult getPreviousResult() { if (b == null) { return null; } + + // abort if the job is configured to not do this + AbstractTestResultAction tra = b.getAction(getParentAction().getClass()); + if ( tra != null && !tra.shouldCalculatePreviousResults()) return null; + while(true) { b = b.getPreviousBuild(); if(b==null) diff --git a/src/main/java/hudson/tasks/test/TestResultProjectAction.java b/src/main/java/hudson/tasks/test/TestResultProjectAction.java index 22f19d74a..8f00e8908 100644 --- a/src/main/java/hudson/tasks/test/TestResultProjectAction.java +++ b/src/main/java/hudson/tasks/test/TestResultProjectAction.java @@ -107,7 +107,7 @@ public AbstractTestResultAction getLastTestResultAction() { */ public void doTrend( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { AbstractTestResultAction a = getLastTestResultAction(); - if(a!=null) + if(a!=null && a.shouldCalculatePreviousResults()) a.doGraph(req,rsp); else rsp.setStatus(HttpServletResponse.SC_NOT_FOUND); diff --git a/src/main/resources/hudson/tasks/junit/JobTestResultDisplayProperty/config.jelly b/src/main/resources/hudson/tasks/junit/JobTestResultDisplayProperty/config.jelly new file mode 100644 index 000000000..53648bb18 --- /dev/null +++ b/src/main/resources/hudson/tasks/junit/JobTestResultDisplayProperty/config.jelly @@ -0,0 +1,33 @@ + + + + + diff --git a/src/main/resources/hudson/tasks/junit/JobTestResultDisplayProperty/help-disableHistoricalResults.html b/src/main/resources/hudson/tasks/junit/JobTestResultDisplayProperty/help-disableHistoricalResults.html new file mode 100644 index 000000000..4b2726ffa --- /dev/null +++ b/src/main/resources/hudson/tasks/junit/JobTestResultDisplayProperty/help-disableHistoricalResults.html @@ -0,0 +1,28 @@ + +
+If enabled, historical test results will not be computed and maintained for this job. +
+The test results graph will not be displayed, and the number of builds for which a test has been failing will not be computed. +
diff --git a/src/main/resources/hudson/tasks/test/TestResultProjectAction/floatingBox.jelly b/src/main/resources/hudson/tasks/test/TestResultProjectAction/floatingBox.jelly index 3f6f158e1..ee9d4cf02 100644 --- a/src/main/resources/hudson/tasks/test/TestResultProjectAction/floatingBox.jelly +++ b/src/main/resources/hudson/tasks/test/TestResultProjectAction/floatingBox.jelly @@ -25,7 +25,7 @@ THE SOFTWARE. - +