重新打包存档时如何只修改一个文件?

时间:2017-08-08 22:09:16

标签: bazel

我正在尝试使用非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",
)

有没有人有更好的方法来做到这一点?

谢谢,肖恩

1 个答案:

答案 0 :(得分:1)

您可以使用如下变量:

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

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

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

然后静态文件和可修改文件的列表将保持同步,如果您不小心指定了不存在的可修改文件,则会出现构建错误。