Skip to content

Commit

Permalink
[FIXED JENKINS-10366] choose most 'relevant' job for dependency graph…
Browse files Browse the repository at this point in the history
… if multiple jobs are building the same maven module

Originally-Committed-As: b8aec882f28bbbd889ebc1f4a761ed1310353040
  • Loading branch information
kutzi committed Jul 25, 2011
1 parent be0e4fd commit 0a9633e
Showing 1 changed file with 52 additions and 2 deletions.
54 changes: 52 additions & 2 deletions src/main/java/hudson/maven/MavenModule.java
Expand Up @@ -404,9 +404,11 @@ protected void buildDependencyGraph(DependencyGraph graph) {
for (MavenModule m : Jenkins.getInstance().getAllItems(MavenModule.class)) {
if(m.isDisabled()) continue;
ModuleDependency moduleDependency = m.asDependency();
modules.put(moduleDependency,m);
MavenModule old = modules.get(moduleDependency);
MavenModule relevant = chooseMoreRelevantModule(old, m);
modules.put(moduleDependency, relevant);
if (hasDependenciesWithUnknownVersion) {
modules.put(moduleDependency.withUnknownVersion(),m);
modules.put(moduleDependency.withUnknownVersion(),relevant);
}
}
data = new MavenDependencyComputationData(modules);
Expand Down Expand Up @@ -477,6 +479,54 @@ private boolean hasDependenciesWithUnknownVersion() {
}
return false;
}

private MavenModule chooseMoreRelevantModule(MavenModule mm1, MavenModule mm2) {
if (mm1 == null) {
return mm2;
}
if (mm2 == null) {
return mm1;
}

int relevancy1 = getDependencyRelevancy(mm1);
int relevancy2 = getDependencyRelevancy(mm2);

if (relevancy1 > relevancy2) {
return mm1;
} else if (relevancy2 > relevancy1) {
return mm2;
}

// arbitrary, but reproduceable
if (mm1.getParent().getName().compareTo(mm2.getParent().getName()) < 0) {
return mm2;
} else { // should always mean > 0 as name is unique
return mm1;
}
}

private int getDependencyRelevancy(MavenModule mm) {

int relevancy = 0;

for (String goal : Util.tokenize(mm.getGoals())) {
if ("deploy".equals(goal) || "deploy:deploy".equals(goal)) {
return 2;
}

if ("install".equals(goal)) {
relevancy = 1;
}
}

for (Publisher publisher : mm.getParent().getPublishers()) {
if (publisher instanceof RedeployPublisher) {
return 2;
}
}

return relevancy;
}

private static class MavenDependencyComputationData {
boolean withUnknownVersions = false;
Expand Down

0 comments on commit 0a9633e

Please sign in to comment.