blob: 9f186ff09e20e8a9dcc0d0ea9b91f91978c30ea8 [file] [log] [blame]
#!/usr/bin/env groovy
/* Remember for our Hudson jobs this needs to be ran as a
_system_ groovy build stem, not a simple groovy build step.
*/
import org.eclipse.hudson.model.*
void printAllProperties() {
println("\n= = = All Properties = = =\n")
def props = System.getProperties()
for (prop in props) {
println(prop)
}
println("\n= = = End of All Properties = = =\n")
}
void dumpObjectProperties (anyObject) {
def filtered = ['class', 'active']
println("\n= = = Dump Object Properties = = =\n")
println anyObject.properties
.sort{it.key}
.collect{it}
.findAll{!filtered.contains(it.key)}
.join('\n')
println("\n= = = End of Dump Object Properties = = =\n")
}
void cancelIfAlsoQueued (String jobName) {
//println("\n= = = = Checking if other Queued Jobs = = = = = = = =\n");
// Direct check of null does not work as expect.
// Can not use variable in "wrapped script" at all, unless defined,
// else MissingProperty exception
// is thrown:
// groovy.lang.MissingPropertyException: No such property: jobName for class: Script1
if (! jobName){
println("PROGRAMMING ERROR: This script must be provided a project name)");
}
else {
//println("Job name to clear from queue, if any: " + jobName);
def q = hudson.model.Hudson.getInstance().getQueue();
def qitems = q.getItems();
def nJobsOfSameName = 0;
if (qitems.length == 0) {
println("\n\tNo other jobs in queue\n")
} else {
for (i=0;i<qitems.length;i++) {
job=qitems[i].task;
//dumpObjectProperties(job)
if (job.getName().equals(jobName)) {
nJobsOfSameName++;
// If we find at even one of same name, we do not need to keep checking.
break;
}
}
// in our case, we do not want to cancel whole queue
// if (qitems.length > 0) {
// qitems[i].doCancelQueue()
// Instead we will cancel, not fail, current job
if (nJobsOfSameName > 0) {
println("\n\tThis job was automatically cancelled, since another was in the queue, that will include the contribution.\n");
throw new InterruptedException();
} else {
println("\n\tNo other jobs, of same name (" + jobName + ") were in the queue");
}
}
}
}
println("[INFO] Beginning Groovy script");
println("Groovy Version: " + GroovySystem.version);
printAllProperties();
String thisProjectName = "";
// println("**** Dump this");
// dumpObjectProperties(this);
// println("**** Dump this.getBinding()");
// dumpObjectProperties(this.getBinding());
// println("**** Dump binding.getVariable('build')");
// dumpObjectProperties(this.getBinding().getVariable("build"));
// thisBuildName = this.getBinding().getVariable("build").getFullName();
thisProjectName = this.getBinding().getVariable("build").getParent().getFullName();
// println("thisBuildName: " + thisBuildName);
// println("thisProjectName: " + thisProjectName);
cancelIfAlsoQueued(thisProjectName);
println("[INFO] Ending Groovy script");