2012-12-17 28 views
10

Có một cách đơn giản để ghi ra tập tin phiên bản lanh lợi (hoặc lệnh bên ngoài tương tự) trong một nhiệm vụ gradle:Gradle nhiệm vụ viết hg sửa đổi để nộp

Tôi chưa groovy/gradle thông thạo, nhưng tôi nỗ lực hiện nay trông như thế này:

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

Trả lời

12

có hai vấn đề với xây dựng kịch bản này:

dòng
  1. lệnh cần được chia; gradle của cố gắng để thực hiện một nhị phân có tên hg id -i -b t thay vì hg với đối số id, -i, -bt
  2. Sản lượng tiêu chuẩn cần phải được chụp; bạn có thể làm cho nó một ByteOutputStream được đọc sau

Hãy thử điều này:

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

Điều này hoạt động, cảm ơn. Có một lỗi đánh máy trong lệnh hg ban đầu của tôi mà bạn có thể muốn lưu ý trong câu trả lời của bạn để tham khảo trong tương lai. Nó cũng có vẻ như tôi cần versionfile, không phải ext.versionfile – cmh

0

Ở đây tôi có một chút cách tiếp cận khác nhau, trong đó sử dụng javahg để có được sửa đổi. Và thêm công việc "writeRevisionToFile"

Tôi đã viết bài đăng ngắn trên blog của mình 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() 
} 
Các vấn đề liên quan