Permalink
Browse files

[FIXED JENKINS-23179] git pre-merge fails with matrix project

  • Loading branch information...
galbramc authored and MarkEWaite committed Jun 9, 2014
1 parent cecfd4f commit 15f83d1386f6d54eaf6ed591c4cc787e36969ab8
Showing with 34 additions and 28 deletions.
  1. +34 −28 src/main/java/hudson/plugins/git/GitSCM.java
@@ -771,48 +771,54 @@ public EnvVars getEnvironment() {
final BuildListener listener) throws IOException, InterruptedException {
PrintStream log = listener.getLogger();

// every MatrixRun should build the exact same commit ID
Revision marked = null;

// every MatrixRun should build the same marked commit ID
if (build instanceof MatrixRun) {
MatrixBuild parentBuild = ((MatrixRun) build).getParentBuild();
if (parentBuild != null) {
BuildData parentBuildData = getBuildData(parentBuild);
if (parentBuildData != null) {
Build lastBuild = parentBuildData.lastBuild;
if (lastBuild!=null)
return lastBuild;
marked = lastBuild.getMarked();
}
}
}

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

final String singleBranch = environment.expand( getSingleBranch(environment) );

final BuildChooserContext context = new BuildChooserContextImpl(build.getProject(), build, environment);
Collection<Revision> 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");
AbstractProject<?, ?> project = build.getProject();
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());
if( marked == null ) {
// parameter forcing the commit ID to build
final RevisionParameterAction rpa = build.getAction(RevisionParameterAction.class);
if (rpa != null)
return new Build(rpa.toRevision(git), build.getNumber(), null);

final String singleBranch = environment.expand( getSingleBranch(environment) );

final BuildChooserContext context = new BuildChooserContextImpl(build.getProject(), build, environment);
Collection<Revision> 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");
AbstractProject<?, ?> project = build.getProject();
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();
}
Revision rev = candidates.iterator().next();
Revision marked = rev;

Revision rev = marked;
//Modify the revision based on extensions
for (GitSCMExtension ext : extensions) {
rev = ext.decorateRevisionToBuild(this,build,git,listener,rev);
}

0 comments on commit 15f83d1

Please sign in to comment.