2017-08-08 66 views
1

我試圖帶一個非Bazel製作的zipfile,修改其中的大部分文件,然後最終生成一個新的包含〜原創內容的tarball(加上我的修改)如何在重新打包檔案時僅修改一個文件?

I'我很難以一種乾淨的方式指定我的規則,如果有關於如何做到這一點的建議,它會很棒。

我正在通過'new_http_archive'WORKSPACE規則導入原始zip文件。這工作得很好。我把構建文件放在根目錄下的一個包中。我們稱之爲'foo_repackage'。

在foo_repackage/BUILD.root_archive:

package(default_visibility = ["//visibility:public"]) 

filegroup(
    name = "all_files", 
    srcs = glob(
     ["**"], 
     exclude = ["*", "share/doc/api/**"] 
    ), 
) 

更大的問題是在foo_repackage/BUILD文件,我想帶的所有文件上面的all_files組,除了爲我會修改其中的一些。我看不出如何輕鬆做到這一點。看起來好像我想要修改的每個文件都應該從上面的glob中排除並制定一個指定該文件的新規則。這意味着我必須不斷修改全局all_files排除規則。

如果我可以創建一個新的文件組,其中包含排除某些文件的所有上述文件,那將是理想的。

我應該提到的是,最後一步當然是使用pkg_tar重新包裝的結果 - 這是foo_repackage/BUILD

pkg_tar(
    name = "OutputTarball", 
    files = ["@root_archive//:all_files"], 
    deps = [":layers_of_modified_files"], 
    strip_prefix = "/../root_archive", 
) 

有沒有人有更好的方式來做到這一點?

謝謝,肖恩

+0

這對我來說似乎很合理。你最關心的是什麼?排除名單將變得很長? 您可能會遇到一個問題,您嘗試使用文件系統上存在的同名文件(來自zip)生成文件。巴澤爾不會那樣。 – zlalanne

回答

1

你可以使用一個變量,如:

MODIFIABLE_FILES = [ 
    "some/file", 
    "another/file", 
    ... 
] 

filegroup(
    name = "static-files", 
    srcs = glob(["**"], exclude = MODIFIABLE_FILES) 
) 

filegroup(
    name = "modifiable-files", 
    srcs = MODIFIABLE_FILES, 
) 

隨後的靜態文件和修改的文件列表將保持同步,你會如果你不小心得到一個生成錯誤指定一個不存在的可修改文件。

+0

這是完美的。我沒有想到可變解決方案 - 它使維護變得簡單,特別是,它使得修改其中一個靜態文件時不會出現錯誤,因爲它們不在第二個文件組中。 –

相關問題