From f1d750754050c0465a9daa0e343fa51614324725 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Wed, 31 Jan 2007 15:11:55 +0000 Subject: [PATCH] modified to align build numbers among modules. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@2004 71c3de6d-444a-0410-be80-ed276b4c234a --- .../main/java/hudson/maven/MavenModule.java | 11 +++++++ .../java/hudson/maven/MavenModuleSet.java | 29 +++++++++++++++++++ core/src/main/java/hudson/model/Job.java | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/maven/MavenModule.java b/core/src/main/java/hudson/maven/MavenModule.java index 4ecf0f8260..bd02ff6257 100644 --- a/core/src/main/java/hudson/maven/MavenModule.java +++ b/core/src/main/java/hudson/maven/MavenModule.java @@ -102,6 +102,17 @@ public final class MavenModule extends AbstractProject i return (MavenModuleSet)super.getParent(); } + /*package*/ int peekNextBuildNumber() { + return nextBuildNumber; + } + + /*package*/ void updateNextBuildNumber(int next) throws IOException { + if(next>nextBuildNumber) { + this.nextBuildNumber = next; + saveNextBuildNumber(); + } + } + /** * {@link MavenModule} uses the workspace of the {@link MavenModuleSet}, * so it always needs to be built on the same slave as the parent. diff --git a/core/src/main/java/hudson/maven/MavenModuleSet.java b/core/src/main/java/hudson/maven/MavenModuleSet.java index e7da817027..93a8eda8e5 100644 --- a/core/src/main/java/hudson/maven/MavenModuleSet.java +++ b/core/src/main/java/hudson/maven/MavenModuleSet.java @@ -2,6 +2,7 @@ package hudson.maven; import hudson.FilePath; import hudson.Launcher; +import hudson.triggers.Trigger; import hudson.model.AbstractProject; import hudson.model.DependencyGraph; import hudson.model.Hudson; @@ -12,6 +13,7 @@ import hudson.model.Job; import hudson.model.TaskListener; import hudson.model.TopLevelItem; import hudson.model.TopLevelItemDescriptor; +import hudson.model.Executor; import hudson.util.CopyOnWriteMap; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; @@ -151,6 +153,33 @@ public class MavenModuleSet extends AbstractProject + * This method is invoked from {@link Executor#run()}, + * and because of the mutual exclusion among {@link MavenModuleSetBuild} + * and {@link MavenBuild}, we can safely touch all the modules. + */ + public synchronized int assignBuildNumber() throws IOException { + // determine the next value + int next = this.nextBuildNumber; + for (MavenModule m : modules.values()) + next = Math.max(next,m.peekNextBuildNumber()); + + if(this.nextBuildNumber!=next) { + this.nextBuildNumber=next; + this.saveNextBuildNumber(); + } + + for (MavenModule m : modules.values()) + m.updateNextBuildNumber(next); + + return super.assignBuildNumber(); + } + protected void buildDependencyGraph(DependencyGraph graph) { // no dependency for this. } diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java index 9460215d38..8aca1eeeed 100644 --- a/core/src/main/java/hudson/model/Job.java +++ b/core/src/main/java/hudson/model/Job.java @@ -110,7 +110,7 @@ public abstract class Job, RunT extends Run