From 18496c540445929abd09d206072f3a53f1774b54 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sat, 4 Jun 2011 15:46:53 -0700 Subject: [PATCH] - Renamed from 'linked' to 'base' - Fixed the bug where multi-level base setting wasn't working properly - Improved docs --- .../main/java/hudson/matrix/MatrixBuild.java | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/hudson/matrix/MatrixBuild.java b/core/src/main/java/hudson/matrix/MatrixBuild.java index 980fa99fe3..4dfd711515 100644 --- a/core/src/main/java/hudson/matrix/MatrixBuild.java +++ b/core/src/main/java/hudson/matrix/MatrixBuild.java @@ -32,13 +32,10 @@ import hudson.model.Executor; import hudson.model.Fingerprint; import hudson.model.Hudson; import hudson.model.JobProperty; -import hudson.model.Node; import hudson.model.ParametersAction; import hudson.model.Queue; import hudson.model.Result; import hudson.model.Cause.UpstreamCause; -import hudson.slaves.WorkspaceList; -import hudson.slaves.WorkspaceList.Lease; import hudson.tasks.Publisher; import java.io.File; @@ -62,6 +59,12 @@ import org.kohsuke.stapler.export.Exported; public class MatrixBuild extends AbstractBuild { private AxisList axes; + /** + * If non-null, the {@link MatrixBuild} originates from the given build number. + */ + private Integer baseBuild; + + public MatrixBuild(MatrixProject job) throws IOException { super(job); } @@ -116,19 +119,22 @@ public class MatrixBuild extends AbstractBuild { } /** - * If greater than zero, the {@link MatrixBuild} originates from the given build number. + * Sets the base build from which this build is derived. + * @since 1.416 */ - public int linkedNumber = 0; - + public void setBaseBuild(MatrixBuild baseBuild) { + this.baseBuild = (baseBuild==null || baseBuild==getPreviousBuild()) ? null : baseBuild.getNumber(); + } + /** - * Sets the linked number - * @param linkedNumber A given number indicating the origin + * Returns the base {@link MatrixBuild} that this build originates from. + *

+ * If this build is a partial build, unexecuted {@link MatrixRun}s are delegated to this build number. */ - public void setLinkedNumber( int linkedNumber ) { - this.linkedNumber = linkedNumber; + public MatrixBuild getBaseBuild() { + return baseBuild==null ? getPreviousBuild() : getParent().getBuildByNumber(baseBuild); } - /** * Gets the {@link MatrixRun} in this build that corresponds * to the given combination. @@ -136,7 +142,7 @@ public class MatrixBuild extends AbstractBuild { public MatrixRun getRun(Combination c) { MatrixConfiguration config = getParent().getItem(c); if(config==null) return null; - return getRunForConfiguration( config, getNumber() ); + return getRunForConfiguration(config); } /** @@ -146,19 +152,18 @@ public class MatrixBuild extends AbstractBuild { public List getRuns() { List r = new ArrayList(); for(MatrixConfiguration c : getParent().getItems()) { - MatrixRun b = getRunForConfiguration( c, getNumber() ); + MatrixRun b = getRunForConfiguration(c); if (b != null) r.add(b); } return r; } - private MatrixRun getRunForConfiguration( MatrixConfiguration c, int number ) { - MatrixRun b = c.getNearestOldBuild(getNumber()); - if(b.getNumber()!=getNumber() && linkedNumber > 0) { - b = c.getNearestOldBuild(linkedNumber); + private MatrixRun getRunForConfiguration(MatrixConfiguration c) { + for (MatrixBuild b=this; b!=null; b=b.getBaseBuild()) { + MatrixRun r = c.getBuildByNumber(b.getNumber()); + if (r!=null) return r; } - - return b; + return null; } /** -- GitLab