Skip to content
Snippets Groups Projects
Commit a98d08cb authored by felmer's avatar felmer
Browse files

SSDM-513: Calculating build information by re-implementing the logic of...

SSDM-513: Calculating build information by re-implementing the logic of ch.systemsx.cisd.ant.task.subversion.GatherRevisionAndVersionTask in gradle.

SVN: 31783
parent 609ed065
No related branches found
No related tags found
No related merge requests found
...@@ -63,51 +63,76 @@ buildscript { ...@@ -63,51 +63,76 @@ buildscript {
repositories repositoryConfig repositories repositoryConfig
// Gathering version and revision def execute(command, arguments) {
def gatheringTask = new ch.systemsx.cisd.ant.task.subversion.GatherRevisionAndVersionTask() new ByteArrayOutputStream().withStream { os ->
List names = new ArrayList() print "execute: ${command}"
names.add(project.name) arguments.collect({print " ${it}"})
includeFlat = { String[] projectNames -> names.addAll(Arrays.asList(projectNames)) } println ''
try { def result = exec {
apply from: project.file('settings.gradle') executable = command
} catch (Exception e) { args = arguments
println "Warning: Couldn't evaluate 'settings.gradle' in ${project.projectDir}. Possible reason: Other statements than 'includeFlat': ${e}" standardOutput = os
}
return os.toString().split('\n')
}
} }
gatheringTask.setProjectNames(names)
println "PROJECT: ${project.name}, gather revision for following projects: ${gatheringTask.projectNames}" def SVN_CMD = 'svn'
def antProject = new org.apache.tools.ant.Project()
antProject.setBaseDir(new File("${project.projectDir}")) def executeSVN(arguments) {
gatheringTask.setProject(antProject) arguments.add(0, '--non-interactive')
gatheringTask.setVersion("version") return execute('svn', arguments)
gatheringTask.setRevision("revision") }
gatheringTask.setClean("clean")
def calculateCleanFlag() {
try { for (childProject in project.childProjects.values()) {
gatheringTask.execute() if (childProject.cleanFlag == 'dirty') {
versionNumber = antProject.getProperty("version") return 'dirty'
revisionNumber = antProject.getProperty("revision") }
cleanFlag = antProject.getProperty("clean") }
def output = executeSVN(['status', '../' + project.name])
// set version def lines = output.findAll({ (it.startsWith('?') || it.trim().isEmpty()) == false})
version=versionNumber+"-r"+revisionNumber return lines.isEmpty() ? 'clean' : 'dirty'
println "${project.name}: ${version}" }
// create BUILD INFO file def findMaximum(lines, key) {
return lines.findAll({ it.startsWith(key)}).collect({element -> element.split(':')[1].toInteger()}).max()
}
def calculateBuildInfo() {
def output = executeSVN(['info', '-R', '../' + project.name])
project.ext.revisionNumber = findMaximum(output, 'Revision:')
def maxLastChangedRev = findMaximum(output, 'Last Changed Rev:')
if (project.ext.revisionNumber < maxLastChangedRev) {
throw new GradleException("Maximum revision (${project.ext.revisionNumber}) is less than the maximum "
+ "last changed revision ($maxLastChangedRev).")
}
project.ext.versionNumber = 'SNAPSHOT'
def url = output.findAll({ it.startsWith('URL:')})[0].split('URL:')[1].trim()
if (url.contains('/trunk') == false) {
pathElements = url.split('/')
project.ext.versionNumber = 'libraries' == pathElements[-2] ? pathElements[-3] : pathElements[-2]
}
for (childProject in project.childProjects.values()) {
project.ext.revisionNumber = Math.max(project.ext.revisionNumber, childProject.revisionNumber)
if (project.ext.versionNumber != childProject.versionNumber) {
throw new GradleException("Inconsistent version numbers: "
+ "${project.name} at version ${project.ext.versionNumber} but "
+ "${childProject.name} at version ${childProject.versionNumber}.")
}
}
version = "${project.ext.versionNumber}-r${project.ext.revisionNumber}"
project.ext.cleanFlag = calculateCleanFlag()
def buildInfo = "${project.ext.versionNumber}:${project.ext.revisionNumber}:${project.ext.cleanFlag}"
println "BUILD INFO for $project: $buildInfo"
def targetsDist = 'targets/dist' def targetsDist = 'targets/dist'
def distFolder = new File("${project.projectDir}/${targetsDist}") def distFolder = new File("${project.projectDir}/$targetsDist")
distFolder.deleteDir() distFolder.deleteDir()
distFolder.mkdirs() distFolder.mkdirs()
file("${project.projectDir}/$targetsDist/BUILD-${project.name}.INFO") << buildInfo
def writer = new FileWriter("${project.projectDir}/${targetsDist}/BUILD-${project.name}.INFO")
try {
writer.println("${versionNumber}:${revisionNumber}:${cleanFlag}")
} finally {
writer.close()
}
} catch (Exception e) {
println "skipping gathering"
} }
calculateBuildInfo()
group="cisd" group="cisd"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment