Skip to content

Commit

Permalink
Merge pull request #7 from jorgenpt/dont-count-not_built
Browse files Browse the repository at this point in the history
[JENKINS-11726] Do not count NOT_BUILT.
  • Loading branch information
rsandell committed Aug 29, 2012
2 parents f70e4fc + 749c877 commit 7725166
Show file tree
Hide file tree
Showing 20 changed files with 488 additions and 233 deletions.
Expand Up @@ -83,6 +83,14 @@ public class Config implements IGerritHudsonTriggerConfig {
* Default verified vote to Gerrit when a build is successful.
*/
public static final int DEFAULT_GERRIT_BUILD_SUCCESSFUL_VERIFIED_VALUE = 1;
/**
* Default verified vote to Gerrit when a build is not built.
*/
public static final int DEFAULT_GERRIT_BUILD_NOT_BUILT_VERIFIED_VALUE = 0;
/**
* Default code review vote to Gerrit when a build is not built.
*/
public static final int DEFAULT_GERRIT_BUILD_NOT_BUILT_CODE_REVIEW_VALUE = 0;
/**
* Default manual trigger enabled.
*/
Expand All @@ -103,6 +111,7 @@ public class Config implements IGerritHudsonTriggerConfig {
private String gerritVerifiedCmdBuildUnstable;
private String gerritVerifiedCmdBuildFailed;
private String gerritVerifiedCmdBuildStarted;
private String gerritVerifiedCmdBuildNotBuilt;
private String gerritFrontEndUrl;
private int gerritBuildStartedVerifiedValue;
private int gerritBuildStartedCodeReviewValue;
Expand All @@ -112,6 +121,8 @@ public class Config implements IGerritHudsonTriggerConfig {
private int gerritBuildFailedCodeReviewValue;
private int gerritBuildUnstableVerifiedValue;
private int gerritBuildUnstableCodeReviewValue;
private int gerritBuildNotBuiltVerifiedValue;
private int gerritBuildNotBuiltCodeReviewValue;
private boolean enableManualTrigger;
private int numberOfSendingWorkerThreads;
private int buildScheduleDelay;
Expand Down Expand Up @@ -185,6 +196,12 @@ public void setValues(JSONObject formData) {
gerritBuildUnstableCodeReviewValue = formData.optInt(
"gerritBuildUnstableCodeReviewValue",
DEFAULT_GERRIT_BUILD_UNSTABLE_CODE_REVIEW_VALUE);
gerritBuildNotBuiltVerifiedValue = formData.optInt(
"gerritBuildNotBuiltVerifiedValue",
DEFAULT_GERRIT_BUILD_NOT_BUILT_VERIFIED_VALUE);
gerritBuildNotBuiltCodeReviewValue = formData.optInt(
"gerritBuildNotBuiltCodeReviewValue",
DEFAULT_GERRIT_BUILD_NOT_BUILT_CODE_REVIEW_VALUE);

gerritVerifiedCmdBuildStarted = formData.optString(
"gerritVerifiedCmdBuildStarted",
Expand All @@ -202,6 +219,10 @@ public void setValues(JSONObject formData) {
"gerritVerifiedCmdBuildUnstable",
"gerrit approve <CHANGE>,<PATCHSET> --message 'Build Unstable <BUILDS_STATS>' "
+ "--verified <VERIFIED> --code-review <CODE_REVIEW>");
gerritVerifiedCmdBuildNotBuilt = formData.optString(
"gerritVerifiedCmdBuildNotBuilt",
"gerrit approve <CHANGE>,<PATCHSET> --message 'No Builds Executed <BUILDS_STATS>' "
+ "--verified <VERIFIED> --code-review <CODE_REVIEW>");
gerritFrontEndUrl = formData.optString(
"gerritFrontEndUrl",
DEFAULT_GERRIT_HOSTNAME);
Expand Down Expand Up @@ -456,6 +477,21 @@ public void setGerritVerifiedCmdBuildStarted(String cmd) {
gerritVerifiedCmdBuildStarted = cmd;
}

@Override
public String getGerritCmdBuildNotBuilt() {
return gerritVerifiedCmdBuildNotBuilt;
}

/**
* GerritVerifiedCmdBuildNotBuilt.
*
* @param cmd the command
* @see #getGerritCmdBuildNotBuilt()
*/
public void setGerritVerifiedCmdBuildNotBuilt(String cmd) {
gerritVerifiedCmdBuildNotBuilt = cmd;
}

@Override
public int getGerritBuildStartedVerifiedValue() {
return gerritBuildStartedVerifiedValue;
Expand Down Expand Up @@ -496,6 +532,16 @@ public int getGerritBuildUnstableCodeReviewValue() {
return gerritBuildUnstableCodeReviewValue;
}

@Override
public int getGerritBuildNotBuiltVerifiedValue() {
return gerritBuildNotBuiltVerifiedValue;
}

@Override
public int getGerritBuildNotBuiltCodeReviewValue() {
return gerritBuildNotBuiltCodeReviewValue;
}

@Override
public String getGerritFrontEndUrlFor(String changeSetNumber, String revision) {
StringBuilder str = new StringBuilder(getGerritFrontEndUrl());
Expand Down
Expand Up @@ -72,6 +72,12 @@ public interface IGerritHudsonTriggerConfig extends GerritConnectionConfig {
*/
String getGerritCmdBuildUnstable();

/**
* The command template to use when sending build-not-built messages to Gerrit.
* @return the command template.
*/
String getGerritCmdBuildNotBuilt();

/**
* The default verified value for build started.
* @return the value.
Expand Down Expand Up @@ -120,6 +126,18 @@ public interface IGerritHudsonTriggerConfig extends GerritConnectionConfig {
*/
int getGerritBuildUnstableCodeReviewValue();

/**
* The default verified value for build not built.
* @return the value.
*/
int getGerritBuildNotBuiltVerifiedValue();

/**
* The default code review value for build not built.
* @return the value.
*/
int getGerritBuildNotBuiltCodeReviewValue();

/**
* Sets all config values from the provided JSONObject.
* @param form the JSON object with form data.
Expand Down
Expand Up @@ -255,6 +255,12 @@ protected int getCodeReviewValue(Result res, GerritTrigger trigger) {
} else {
return config.getGerritBuildUnstableCodeReviewValue();
}
} else if (res == Result.NOT_BUILT) {
if (trigger.getGerritBuildNotBuiltCodeReviewValue() != null) {
return trigger.getGerritBuildNotBuiltCodeReviewValue();
} else {
return config.getGerritBuildNotBuiltCodeReviewValue();
}
} else {
//As bad as failue, for now
if (trigger.getGerritBuildFailedCodeReviewValue() != null) {
Expand Down Expand Up @@ -290,6 +296,12 @@ protected int getVerifiedValue(Result res, GerritTrigger trigger) {
} else {
return config.getGerritBuildUnstableVerifiedValue();
}
} else if (res == Result.NOT_BUILT) {
if (trigger.getGerritBuildNotBuiltVerifiedValue() != null) {
return trigger.getGerritBuildNotBuiltVerifiedValue();
} else {
return config.getGerritBuildNotBuiltVerifiedValue();
}
} else {
//As bad as failure, for now
if (trigger.getGerritBuildFailedVerifiedValue() != null) {
Expand All @@ -303,29 +315,39 @@ protected int getVerifiedValue(Result res, GerritTrigger trigger) {
/**
* Returns the minimum verified value for the build results in the memory.
* @param memoryImprint the memory.
* @param onlyBuilt only count builds that completed (no NOT_BUILT builds)
* @return the lowest verified value.
*/
protected int getMinimumVerifiedValue(MemoryImprint memoryImprint) {
protected int getMinimumVerifiedValue(MemoryImprint memoryImprint, boolean onlyBuilt) {
int verified = Integer.MAX_VALUE;
for (Entry entry : memoryImprint.getEntries()) {
verified = Math.min(verified, getVerifiedValue(
entry.getBuild().getResult(),
GerritTrigger.getTrigger(entry.getProject())));
Result result = entry.getBuild().getResult();
if (onlyBuilt && result == Result.NOT_BUILT) {
continue;
}

GerritTrigger trigger = GerritTrigger.getTrigger(entry.getProject());
verified = Math.min(verified, getVerifiedValue(result, trigger));
}
return verified;
}

/**
* Returns the minimum code review value for the build results in the memory.
* @param memoryImprint the memory
* @param onlyBuilt only count builds that completed (no NOT_BUILT builds)
* @return the lowest code review value.
*/
protected int getMinimumCodeReviewValue(MemoryImprint memoryImprint) {
protected int getMinimumCodeReviewValue(MemoryImprint memoryImprint, boolean onlyBuilt) {
int codeReview = Integer.MAX_VALUE;
for (Entry entry : memoryImprint.getEntries()) {
codeReview = Math.min(codeReview, getCodeReviewValue(
entry.getBuild().getResult(),
GerritTrigger.getTrigger(entry.getProject())));
Result result = entry.getBuild().getResult();
if (onlyBuilt && result == Result.NOT_BUILT) {
continue;
}

GerritTrigger trigger = GerritTrigger.getTrigger(entry.getProject());
codeReview = Math.min(codeReview, getCodeReviewValue(result, trigger));
}
return codeReview;
}
Expand All @@ -338,12 +360,19 @@ protected int getMinimumCodeReviewValue(MemoryImprint memoryImprint) {
*/
public String getBuildCompletedCommand(MemoryImprint memoryImprint, TaskListener listener) {
String command;
// We only count builds without NOT_BUILT status normally. If *no*
// builds were successful, unstable or failed, we find the minimum
// verified/code review value for the NOT_BUILT ones too.
boolean onlyCountBuilt = true;
if (memoryImprint.whereAllBuildsSuccessful()) {
command = config.getGerritCmdBuildSuccessful();
} else if (memoryImprint.whereAnyBuildsFailed()) {
command = config.getGerritCmdBuildFailed();
} else if (memoryImprint.whereAnyBuildsUnstable()) {
command = config.getGerritCmdBuildUnstable();
} else if (memoryImprint.wereAllBuildsNotBuilt()) {
onlyCountBuilt = false;
command = config.getGerritCmdBuildNotBuilt();
} else {
//Just as bad as failed for now.
command = config.getGerritCmdBuildFailed();
Expand All @@ -352,8 +381,8 @@ public String getBuildCompletedCommand(MemoryImprint memoryImprint, TaskListener
int verified = 0;
int codeReview = 0;
if (memoryImprint.getEvent().isScorable()) {
verified = getMinimumVerifiedValue(memoryImprint);
codeReview = getMinimumCodeReviewValue(memoryImprint);
verified = getMinimumVerifiedValue(memoryImprint, onlyCountBuilt);
codeReview = getMinimumCodeReviewValue(memoryImprint, onlyCountBuilt);
}

Map<String, String> parameters = createStandardParameters(null, memoryImprint.getEvent(), codeReview, verified);
Expand Down Expand Up @@ -417,6 +446,8 @@ private String createBuildsStats(MemoryImprint memoryImprint, TaskListener liste
customMessage = trigger.getBuildFailureMessage();
} else if (res == Result.UNSTABLE) {
customMessage = trigger.getBuildUnstableMessage();
} else if (res == Result.NOT_BUILT) {
customMessage = trigger.getBuildNotBuiltMessage();
} else {
customMessage = trigger.getBuildFailureMessage();
}
Expand Down
Expand Up @@ -571,7 +571,8 @@ public synchronized boolean whereAllBuildsSuccessful() {
} else if (!entry.isBuildCompleted()) {
return false;
}
if (entry.getBuild().getResult() != Result.SUCCESS) {
Result buildResult = entry.getBuild().getResult();
if (buildResult != Result.SUCCESS) {
return false;
}
}
Expand Down Expand Up @@ -608,6 +609,27 @@ public synchronized boolean whereAnyBuildsUnstable() {
return false;
}

/**
* Tells if all builds in the memory were not built.
*
* @return true if it is so, false if not all builds have started or not completed or have any different
* result than {@link Result#NOT_BUILT}.
*/
public synchronized boolean wereAllBuildsNotBuilt() {
for (Entry entry : list) {
if (entry.getBuild() == null) {
return false;
} else if (!entry.isBuildCompleted()) {
return false;
}
Result buildResult = entry.getBuild().getResult();
if (buildResult != Result.NOT_BUILT) {
return false;
}
}
return true;
}

//CS IGNORE FinalClass FOR NEXT 5 LINES. REASON: Testability.

/**
Expand Down

0 comments on commit 7725166

Please sign in to comment.