2012-12-17 2 views
10

C'è un modo semplice per scrivere il file della versione Mercurial (o comando esterno simili) in un compito Gradle:compito Gradle a scrivere hg revisione al file

non sono ancora Groovy/dimestichezza Gradle, ma il mio sforzo attuale assomiglia a questo:

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() 
    } 
} 

risposta

12

ci sono due problemi con questo script di build:

linea
  1. il comando deve essere suddiviso; Gradle sta cercando di eseguire un binario chiamato hg id -i -b t anziché hg con argomenti id, -i, -b e t
  2. L'uscita standard devono essere acquisiti; si può fare un ByteOutputStream da leggere più tardi

Prova questa:

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() 
    } 
} 
+0

Questo funziona, grazie. C'è stato un refuso nel mio comando hg originale che potresti voler notare nella tua risposta per riferimenti futuri. Sembra anche che io abbia bisogno di versionfile, non di ext.versionfile – cmh

0

Qui ho un po approccio diverso bit, che javahg utilizza per ottenere la revisione. E aggiungi task "writeRevisionToFile"

Ho scritto un breve post sul mio 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() 
}