Bazel 函数返回 sha256sum

问题描述 投票:0回答:1

我正在寻找一种在 bazel 中找到 sha256sum 的方法。 我已经定义了规则,但 bazel 规则定义了写入文件的输出。

    # Create actions to generate the three output files.
    # Actions are run only when the corresponding file is requested.

    ctx.actions.run_shell(
        outputs = [ctx.outputs.sha256],
        inputs = [ctx.file.src],
        use_default_shell_env = True,
        command = "sha256sum {} > {}".format(ctx.file.src.path, ctx.outputs.sha256.path),
    )

    # By default (if you run `bazel build` on this target, or if you use it as a
    # source of another target), only the sha256 is computed.
    return DefaultInfo(files = depset([ctx.outputs.sha256]))


_hashes = rule(
    implementation = _impl,
    attrs = {
        "src": attr.label(mandatory = True, allow_single_file = True),
        "sha256": attr.output(),
    },
)

如何创建一个返回给定源的 sha256 的函数/宏? 感谢帮助?

bazel bazel-rules
1个回答
0
投票

这并不像想象的那样工作,也无法完成(按设计)。规则实现的

return
指定规则发出的提供程序。此信息在分析阶段使用。它不会“返回”结果文件。当处理此信息时,尚未执行任何操作,生成的文件不存在,因此无法计算它们的摘要。这只会发生在下一个执行阶段

本质上,如果您想使用规则生成的哈希摘要执行某些操作,则需要另一个规则,该规则的操作将采用您的第一个规则(带有哈希的文件)的乘积并对其执行操作。以摘要文件作为输入的操作可以放在操作图上,并在其输入可用时执行。

© www.soinside.com 2019 - 2024. All rights reserved.