Gradle задача записать hg-версию в файл
Есть ли простой способ записать в файл меркурийную версию (или аналогичную внешнюю команду) в задачу gradle:
Я еще не знаком groovy/gradle, но мои текущие усилия выглядят так:
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()
}
}
Ответы
Ответ 1
В этой сборке script есть две проблемы:
- командная строка должна быть разделена; gradle пытается выполнить двоичный код с именем
hg id -i -b t
вместо hg
с аргументами id
, -i
, -b
и t
- Требуется захват стандартного вывода; вы можете сделать это
ByteOutputStream
для чтения позже
Попробуйте следующее:
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()
}
}
Ответ 2
Здесь у меня немного другой подход, который использует javahg для пересмотра. И добавьте задачу "writeRevisionToFile"
Я написал краткую запись в своем блоге Gradle - Получить Hg Mercurial версию.
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()
}