Gradle tarea para escribir hg revisión en el file

¿Hay una manera simple de escribir para archivar la versión mercurial (o un command externo similar) en una tarea gradle:

Todavía no soy versado / experto en gradle, pero mi esfuerzo actual se ve así:

task versionInfo(type:Exec){ commandLine 'hg id -i -b -t' ext.versionfile = new File('bin/$baseName-buildinfo.properties') doLast { versionfile.text = 'build.revision=' + standardOutput.toString() } } 

Hay dos problemas con este script de compilation:

  1. la línea de command necesita ser dividida; gradle está tratando de ejecutar un binary llamado hg id -i -bt lugar de hg con arguments id , -i , -b y t
  2. La salida estándar necesita ser capturada; puedes convertirlo en ByteOutputStream para leerlo más tarde

Prueba esto:

 task versionInfo(type:Exec){ commandLine 'hg id -i -b -t'.split() ext.versionfile = new File('bin/$baseName-buildinfo.properties') standardOutput = new ByteArrayOutputStream() doLast { versionfile.text = 'build.revision=' + standardOutput.toString() } } 

Aquí tengo un enfoque un poco diferente, que utiliza javahg para get una revisión. Y agregue la tarea "writeRevisionToFile"

Escribí una breve publicación en mi blog Gradle – Get Hg Mercurial revision .

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.aragost.javahg:javahg:0.4' } } task writeRevisionToFile << { new File(projectDir, "file-with-revision.txt").text = scmRevision } import com.aragost.javahg.Changeset import com.aragost.javahg.Repository import com.aragost.javahg.commands.ParentsCommand String getHgRevision() { def repo = Repository.open(projectDir) def parentsCommand = new ParentsCommand(repo) List<Changeset> changesets = parentsCommand.execute() if (changesets == null || changesets.size() != 1) { def message = "Exactly one was parent expected. " + changesets throw new Exception(message) } return changesets[0].node } ext { scmRevision = getHgRevision() }