diff --git a/core/src/main/java/hudson/model/Job.java b/core/src/main/java/hudson/model/Job.java index c4c8679674..d22c25e98e 100644 --- a/core/src/main/java/hudson/model/Job.java +++ b/core/src/main/java/hudson/model/Job.java @@ -34,6 +34,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.BulkChange; import hudson.EnvVars; import hudson.Extension; +import hudson.ExtensionList; import hudson.ExtensionPoint; import hudson.FeedAdapter; import hudson.PermalinkList; @@ -337,12 +338,42 @@ public abstract class Job, RunT extends Run job, SaveNextBuildNumber saveNextBuildNumber) throws IOException; + /** + * Provides an externally accessible alias for {@link Job#saveNextBuildNumber}, which is {@code protected}. + * ({@link #getNextBuildNumber} and {@link #fastUpdateNextBuildNumber} are already accessible.) + */ + interface SaveNextBuildNumber { + void call() throws IOException; + } + } + + @Restricted(DoNotUse.class) + @Extension(ordinal = -1000) + public static final class DefaultBuildNumberAssigner implements BuildNumberAssigner { + @Override + public int assignBuildNumber(Job job, SaveNextBuildNumber saveNextBuildNumber) throws IOException { + synchronized (job) { + int r = job.nextBuildNumber++; + saveNextBuildNumber.call(); + return r; + } + } } /**