过渡

表示依赖边上的配置转换。例如,如果 //package:foo 依赖于具有配置转换的 //package:bar,则 //package:bar(及其依赖项)的配置将是 //package:foo 的配置加上转换函数指定的更改。

成员

过渡

transition transition(*, implementation, inputs, outputs)

一种读取一组输入 build 设置并写入一组输出 build 设置的过渡。

示例:

def _transition_impl(settings, attr):
    # This transition just reads the current CPU value as a demonstration.
    # A real transition could incorporate this into its followup logic.
    current_cpu = settings["//command_line_option:cpu"]
    return {"//command_line_option:compilation_mode": "dbg"}

build_in_debug_mode = transition(
    implementation = _transition_impl,
    inputs = ["//command_line_option:cpu"],
    outputs = ["//command_line_option:compilation_mode"],
)

如要了解详情,请点击此处

参数

参数 说明
implementation 可调用; 必需
实现此转换的函数。此函数始终有两个参数:settingsattrsettings 形参是一个字典,其键集由 inputs 形参定义。因此,对于每个 build 设置 --//foo=bar,如果 inputs 包含 //foosettings 将包含一个条目 settings['//foo']='bar'

attr 参数是对 ctx.attr 的引用。这样,实现函数便可访问规则的属性,从而实现属性参数化转换。

此函数必须返回一个从 build 设置标识符到 build 设置值的 dict;这表示配置过渡:对于返回的 dict 中的每个条目,过渡都会将相应设置更新为新值。所有其他设置保持不变。如果发生拆分过渡,此函数还可以返回由 dict 组成的 list 或由 dict 组成的 dict

inputs 字符串序列;必需
可由此过渡读取的 build 设置的列表。这会成为实现函数形参的设置形参的键集。
outputs 字符串序列;必需
可由此过渡写入的 build 设置的列表。这必须是相应过渡返回的字典的键集的超集。

and_then

transition transition.and_then(transition)

返回一个新过渡,该过渡先应用此过渡,然后再应用给定的过渡。第二个过渡会读取此过渡生成的 build 设置;原始过渡保持不变。结果本身也是一种过渡,可以进一步组合。

只要可以使用组合的组件过渡,就可以将组合用作规则或属性过渡。最多只能有一个组合过渡以执行配置(例如 config.exec)为目标。如果链中的两个过渡拆分了配置,则结果将包含其拆分的叉积;每个组合拆分的键是组件键的以逗号分隔串联。

参数

参数 说明
transition transition; required
此转换之后要应用的转换。