Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[FIXED JENKINS-21464] save current Build in BuildData before re-sched…
…uling job
  • Loading branch information
ndeloof committed Sep 22, 2014
1 parent db14f9f commit 70b7c8d
Showing 1 changed file with 36 additions and 34 deletions.
70 changes: 36 additions & 34 deletions src/main/java/hudson/plugins/git/GitSCM.java
Expand Up @@ -813,9 +813,8 @@ public EnvVars getEnvironment() {
final GitClient git,
final TaskListener listener) throws IOException, InterruptedException {
PrintStream log = listener.getLogger();
Collection<Revision> candidates = Collections.EMPTY_LIST;

Revision marked = null;

// every MatrixRun should build the same marked commit ID
if (build instanceof MatrixRun) {
MatrixBuild parentBuild = ((MatrixRun) build).getParentBuild();
Expand All @@ -824,53 +823,57 @@ public EnvVars getEnvironment() {
if (parentBuildData != null) {
Build lastBuild = parentBuildData.lastBuild;
if (lastBuild!=null)
marked = lastBuild.getMarked();
candidates = Collections.singleton(lastBuild.getMarked());
}
}
}

if( marked == null ) {
// parameter forcing the commit ID to build
// parameter forcing the commit ID to build
if (candidates.isEmpty() ) {
final RevisionParameterAction rpa = build.getAction(RevisionParameterAction.class);
if (rpa != null)
return new Build(rpa.toRevision(git), build.getNumber(), null);
if (rpa != null) {
candidates = Collections.singleton(rpa.toRevision(git));
}
}

if (candidates.isEmpty() ) {
final String singleBranch = environment.expand( getSingleBranch(environment) );

final BuildChooserContext context = new BuildChooserContextImpl(build.getParent(), build, environment);
Collection<Revision> candidates = getBuildChooser().getCandidateRevisions(
candidates = getBuildChooser().getCandidateRevisions(
false, singleBranch, git, listener, buildData, context);
}

if (candidates.size() == 0) {
// getBuildCandidates should make the last item the last build, so a re-build
// will build the last built thing.
throw new AbortException("Couldn't find any revision to build. Verify the repository and branch configuration for this job.");
}

if (candidates.size() > 1) {
log.println("Multiple candidate revisions");
Job<?, ?> job = build.getParent();
if (job instanceof AbstractProject) {
AbstractProject project = (AbstractProject) job;
if (!project.isDisabled()) {
log.println("Scheduling another build to catch up with " + project.getFullDisplayName());
if (!project.scheduleBuild(0, new SCMTrigger.SCMTriggerCause())) {
log.println("WARNING: multiple candidate revisions, but unable to schedule build of " + project.getFullDisplayName());
}
}
}

}

marked = candidates.iterator().next();
if (candidates.isEmpty()) {
// getBuildCandidates should make the last item the last build, so a re-build
// will build the last built thing.
throw new AbortException("Couldn't find any revision to build. Verify the repository and branch configuration for this job.");
}


Revision marked = candidates.iterator().next();
Revision rev = marked;
//Modify the revision based on extensions
// Modify the revision based on extensions
for (GitSCMExtension ext : extensions) {
rev = ext.decorateRevisionToBuild(this,build,git,listener,rev);
}
return new Build(marked, rev, build.getNumber(), null);
Build revToBuild = new Build(marked, rev, build.getNumber(), null);
buildData.saveBuild(revToBuild);

if (candidates.size() > 1) {
log.println("Multiple candidate revisions");
Job<?, ?> job = build.getParent();
if (job instanceof AbstractProject) {
AbstractProject project = (AbstractProject) job;
if (!project.isDisabled()) {
log.println("Scheduling another build to catch up with " + project.getFullDisplayName());
if (!project.scheduleBuild(0, new SCMTrigger.SCMTriggerCause("This build was triggered by build "
+ build.getNumber() + " because more than one build candidate was found."))) {
log.println("WARNING: multiple candidate revisions, but unable to schedule build of " + project.getFullDisplayName());
}
}
}
}
return revToBuild;
}

/**
Expand Down Expand Up @@ -955,7 +958,6 @@ public void checkout(Run<?, ?> build, Launcher launcher, FilePath workspace, Tas
throw new IOException("Could not checkout " + revToBuild.revision.getSha1String(), e);
}

buildData.saveBuild(revToBuild);
build.addAction(new GitTagAction(build, workspace, buildData));

if (changelogFile != null) {
Expand Down

0 comments on commit 70b7c8d

Please sign in to comment.