2012-12-17 5 views
10

Czy istnieje prosty sposób zapisać do pliku wersję rtęciowego (lub podobne polecenie zewnętrzne) w Gradle zadania:Gradle zadanie napisać rewizja Hg złożyć

nie jestem jeszcze Groovy/Gradle biegły, ale moja aktualny wysiłek wygląda następująco:

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

Odpowiedz

12

Istnieją dwa problemy z tym skryptem budowlanej:

linia
  1. polecenie musi być podzielone; Gradle próbuje wykonać plik binarny o nazwie hg id -i -b t zamiast hg z argumentami id, -i, -b i t
  2. potrzebuje Standardowe wyjście do niewoli; można uczynić z niej ByteOutputStream być odczytywane później

Spróbuj tego:

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

To działa, dziękuję. W mojej oryginalnej komendzie hg pojawiła się literówka, którą możesz zanotować w swojej odpowiedzi na przyszłe referencje. Wydaje się również, że potrzebuję pliku versionfile, a nie ext.version – cmh

0

Tu mam trochę inne podejście, które używa javahg dostać rewizji. I dodaj zadanie "writeRevisionToFile"

Napisałem krótki wpis na moim blogu 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() 
}