<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:i="jelly:fmt"> <j:set var="browser" value="${it.build.parent.scm.effectiveBrowser}"/> <j:choose> <j:when test="${it.creationDataPrevBuild != 0}"> <b>${it.creationDataDesc}</b> (build ${it.creationDataPrevBuild}) </j:when> <j:otherwise> <b>${it.creationDataDesc}</b> </j:otherwise> </j:choose> <br/> <br/> <j:choose> <j:when test="${it.emptySet}"> No changes. </j:when> <j:otherwise> <j:choose> <j:when test="${it.hasAddedChanges()}"> <b>New Changes:</b> <ol> <j:forEach var="entry" items="${it.addedChanges}" varStatus="loop"> <j:choose> <j:when test="${entry.id == null}"> No connection to Perforce. </j:when> <j:otherwise> <div class="changeset-message" style="width: 650px; margin-bottom: 4px;"> <a name="detail${loop.index}"></a> <img src="${rootURL}/plugin/p4/icons/changelist.gif" border="0" style="vertical-align: middle"/> <j:choose> <j:when test="${entry.label}"> <b><a href="${browser.getLabelSetLink(entry)}">${entry.id}</a></b> </j:when> <j:otherwise> <b><a href="${browser.getChangeSetLink(entry)}">${entry.id}</a></b> </j:otherwise> </j:choose> by <a href="${rootURL}/${entry.author.url}/">${entry.author}@${entry.clientId}</a> on <i:formatDate value="${entry.date}" type="both" dateStyle="medium" timeStyle="medium"/> <hr/> ${entry.msgAnnotated} <br/> </div> <j:if test="${entry.files.size() > 0}"> <j:choose> <j:when test="${entry.shelved}"> Shelved Files: </j:when> <j:otherwise> Submitted Files: </j:otherwise> </j:choose> <ul style="list-style-type: none;"> <j:forEach var="file" items="${entry.files}" varStatus="fileloop"> <li><img src="${rootURL}/plugin/p4/icons/action-${entry.getAction(file)}.gif" border="0" style="vertical-align"/> <st:nbsp/> <a href="${browser.getFileLink(file)}">${file.depotPathString}</a> <j:set var="diff" value="${browser.getDiffLink(file)}"/> <j:choose> <j:when test="${diff!=null}"> <st:nbsp/> <a href="${diff}">#${file.endRevision}</a> </j:when> <j:otherwise> #${file.endRevision} </j:otherwise> </j:choose> </li> </j:forEach> <j:if test="${entry.fileLimit}"> ...list truncated (more than ${entry.getMaxLimit()} files) </j:if> </ul> </j:if> <j:if test="${entry.jobs.size() > 0}"> Affected Jobs: <ul style="list-style-type: none;"> <j:forEach var="job" items="${entry.jobs}" varStatus="jobloop"> <p><img src="${rootURL}/plugin/p4/icons/job.gif" border="0" style="vertical-align"/> <st:nbsp/> <a href="${browser.getJobLink(job)}">${job.id}</a> - ${entry.getJobStatus(job)} <br/> ${entry.getJobSummary(job)} </p> </j:forEach> </ul> </j:if> </j:otherwise> </j:choose> </j:forEach> </ol> </j:when> </j:choose> <j:choose> <j:when test="${it.hasRemovedChanges()}"> <b>Removed Changes:</b> <ol> <j:forEach var="entry" items="${it.removedChanges}" varStatus="loop"> <j:choose> <j:when test="${entry.id == null}"> No connection to Perforce. </j:when> <j:otherwise> <div class="changeset-message" style="width: 650px; margin-bottom: 4px;"> <a name="detail${loop.index}"></a> <img src="${rootURL}/plugin/p4/icons/changelist.gif" border="0" style="vertical-align: middle"/> <j:choose> <j:when test="${entry.label}"> <b><a href="${browser.getLabelSetLink(entry)}">${entry.id}</a></b> </j:when> <j:otherwise> <b><a href="${browser.getChangeSetLink(entry)}">${entry.id}</a></b> </j:otherwise> </j:choose> by <a href="${rootURL}/${entry.author.url}/">${entry.author}@${entry.clientId}</a> on <i:formatDate value="${entry.date}" type="both" dateStyle="medium" timeStyle="medium"/> <hr/> ${entry.msgAnnotated} <br/> </div> <j:if test="${entry.files.size() > 0}"> <j:choose> <j:when test="${entry.shelved}"> Shelved Files: </j:when> <j:otherwise> Submitted Files: </j:otherwise> </j:choose> <ul style="list-style-type: none;"> <j:forEach var="file" items="${entry.files}" varStatus="fileloop"> <li><img src="${rootURL}/plugin/p4/icons/action-${entry.getAction(file)}.gif" border="0" style="vertical-align"/> <st:nbsp/> <a href="${browser.getFileLink(file)}">${file.depotPathString}</a> <j:set var="diff" value="${browser.getDiffLink(file)}"/> <j:choose> <j:when test="${diff!=null}"> <st:nbsp/> <a href="${diff}">#${file.endRevision}</a> </j:when> <j:otherwise> #${file.endRevision} </j:otherwise> </j:choose> </li> </j:forEach> <j:if test="${entry.fileLimit}"> ...list truncated (more than ${entry.getMaxLimit()} files) </j:if> </ul> </j:if> <j:if test="${entry.jobs.size() > 0}"> Affected Jobs: <ul style="list-style-type: none;"> <j:forEach var="job" items="${entry.jobs}" varStatus="jobloop"> <p><img src="${rootURL}/plugin/p4/icons/job.gif" border="0" style="vertical-align"/> <st:nbsp/> <a href="${browser.getJobLink(job)}">${job.id}</a> - ${entry.getJobStatus(job)} <br/> ${entry.getJobSummary(job)} </p> </j:forEach> </ul> </j:if> </j:otherwise> </j:choose> </j:forEach> </ol> </j:when> </j:choose> <j:choose> <j:when test="${it.hasStructureChanges()}"> <b>CBD Module Structure Changes:</b> <ul> <j:forEach var="c" items="${it.structureChanges}" varStatus="loop"> <p> <b>${c.depotpath}</b> <br/> <j:if test="${c.isnewmodule}"> New module <br/> </j:if> <j:if test="${c.isremovedmodule}"> Removed module <br/> </j:if> <j:if test="${c.codelinediffers}"> Codeline has changed <br/> </j:if> <j:if test="${c.wspathdiffers}"> Workspace path changed <br/> </j:if> <j:choose> <j:when test="${c.hasAddedSubdirs()}"> New subdirectories: ${c.addedSubdirs} <br/> </j:when> </j:choose> <j:choose> <j:when test="${c.hasRemovedSubdirs()}"> Removed subdirectories: ${c.removedSubdirs} <br/> </j:when> </j:choose> <j:choose> <j:when test="${c.hasAddedSubfiles()}"> New subfiles: ${c.addedSubfiles} <br/> </j:when> </j:choose> <j:choose> <j:when test="${c.hasRemovedSubfiles()}"> Removed subfiles: ${c.removedSubfiles} <br/> </j:when> </j:choose> </p> </j:forEach> </ul> </j:when> </j:choose> </j:otherwise> </j:choose> </j:jelly>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#4 | 19234 | dawn_foundry |
Changelogs will now be generated even if the "sync" stage fails. Changelog pages will also display details of which build was compared against to create the changelogs. |
||
#3 | 16582 | dawn_foundry | Adding support for subfile elements in the wschanges output. | ||
#2 | 15395 | dawn_foundry | Changelogs also need to display the added and removed module structure changes, which I appeared to have forgotten previously! | ||
#1 | 15235 | dawn_foundry |
Adding a new way to parse the CBD change logs from wschanges, so we can display all the details. Also added a function which creates a fake change log. Useful for testing the xml parsing. |