我正在尝试使用非Bazel生成的zipfile,修改其中的一些文件,保留大部分文件,然后最终使用〜原始内容(加上我的修改)生成新的tarball
我无法以干净的方式指定我的规则,如果有关于如何做的建议会很好。
我通过'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 :(得分:1)
您可以使用如下变量:
MODIFIABLE_FILES = [
"some/file",
"another/file",
...
]
filegroup(
name = "static-files",
srcs = glob(["**"], exclude = MODIFIABLE_FILES)
)
filegroup(
name = "modifiable-files",
srcs = MODIFIABLE_FILES,
)
然后静态文件和可修改文件的列表将保持同步,如果您不小心指定了不存在的可修改文件,则会出现构建错误。