2017-06-22 71 views
1

Bazel User Manual美國--stamp文檔:如何強制巴澤爾郵票的所有二進制文件?

指定--stamp並不強制受影響的目標進行重建,如果他們的依賴關係並沒有改變。

是否有辦法強制建立受影響的目標,以便所有輸出二進制文件具有相同的印記,即使它們的依賴關係沒有改變?

具體的使用案例是,我正在構建大量相關的Go二進制文件(使用rules_go),並且我想用相同的版本號(可從最新的git commit hash中獲取) 。我可以事先做一個bazel clean,但這有點擊敗使用Bazel的點:)

謝謝!

+0

爲什麼你需要他們是最新版本? – Ittai

+0

我們實際上必須努力工作,不要重建所有東西只是爲了蓋上它,因爲它不會擴展並會破壞緩存。這可以解決在不同的水平,而不是在bazel? – mhlopko

+0

我們需要他們都是最新版本,因爲其他工具依賴於此。這適用於我們的集成環境,它應該反映'master'分支的最新狀態。每個構建二進制文件的buildstamp應該是'master'的git commit哈希。不幸的是,如果他們在不同的二進制文件中看到不同的構建標記,其他工具和開發人員會感到困惑。 可能的解決方法是刪除所有的二進制文件並重建它們:'bazel clean $(bazel query'kind(「go_binary rule」,// ...)')'後面跟着'bazel build'。 – user2514169

回答

1

您可以將.git/refs/heads/<release branch>文件添加爲數據輸入嗎?然後,當提交更改時,您的輸入將自動更改。你可以把它包在genrule添加一些支票或避免對開發分支重建的一切:

genrule(
    name = "stamper", 
    outs = ["stamper.out"], 
    srcs = [ 
     ".git/HEAD", 
     ".git/refs/heads/master", 
    ], 
    cmd = """ 
if [[ $$(cat $(location :.git/HEAD)) = "refs: refs/heads/<release branch>" ]]; then 
    cat $(location :.git/refs/heads/master) 
else 
    # If we're not on the release branch, don't uncache things on commit. 
    echo "dev" 
fi 
""", 
) 

a bug迫使動作被重新運行,你可以跟蹤/發表評論,如果有興趣。