Modifications since last successful build: (${count})
<% changes.eachWithIndex { item, index -> %>
<% if (index) { %>
<% } %>
${item.revision} by ${item.author} on ${item.date}
${item.msg}
<% item.paths.each{ fileEntry -> %>
- ${fileEntry.editType.name} ${fileEntry.value}
<% } %>
<% } %>
<%
if(build.testResultAction) {
def rootUrl = hudson.model.Hudson.instance.rootUrl
def testResult = build.testResultAction
def jobName = build.parent.name
def lastBuildSuccessRate = String.format("%.2f",(testResult.totalCount-testResult.result.failCount)*100f/(testResult.totalCount))
def lastBuildDuration = String.format("%.2f",(testResult.result.duration ))
def startedPassing = []
def startedFailing = []
def failing = []
def previousFailedTestCases = new HashSet()
def currentFailedTestCase = new HashSet()
if(build.previousBuild?.testResultAction){
build.previousBuild.testResultAction.failedTests.each {
previousFailedTestCases << it.fullName
}
}
testResult.failedTests.each{tr ->
def packageName = tr.packageName
def className = tr.simpleName
def testName = tr.safeName
def displayName = tr.fullName
currentFailedTestCase << displayName
def url = "${rootUrl}job/$jobName/lastBuild/testReport/$packageName/$className/$testName"
if(tr.age == 1){
startedFailing << [displayName:displayName,url:url,age:1]
} else{
failing << [displayName:displayName,url:url,age:tr.age]
}
}
startedPassing = previousFailedTestCases - currentFailedTestCase
startedFailing = startedFailing.sort {it.displayName}
failing = failing.sort {it.displayName}
startedPassing = startedPassing.sort()
%>