module_ctx

<ph type="x-smartling-placeholder"></ph> 报告问题 查看来源 每晚 · 7.2。 · 7.1敬上 · 7.0 · 6.5 条 · 6.4 模块扩展的上下文,包含辅助函数以及依赖关系图中相关标记的相关信息。创建模块扩展时,您会获得 module_ctx 对象作为 implementation 函数的参数。

成员

下载

unknown module_ctx.download(url, output='', sha256='', executable=False, allow_fail=False, canonical_id='', auth={}, headers={}, *, integrity='', block=True)

将文件下载到所提供网址的输出路径,并返回一个包含 success 的结构体。如果下载成功完成,该标志为 true;如果下载成功,则会返回一个包含 sha256integrity 字段的文件哈希值。

参数

参数 说明
url string;或 string 的 Iterable; 必需
引用同一文件的镜像网址列表。
output string;或标签;或 path; 默认值为 ''
输出文件的路径(相对于代码库目录)。
sha256 string; 默认值为 ''
所下载文件的预期 SHA-256 哈希。此哈希值必须与所下载文件的 SHA-256 哈希值一致。省略 SHA-256 会带来安全风险,因为远程文件可能会发生变化。省略此字段最好会导致您的 build 变得非封闭。为了简化开发,您可以视需要进行设置,但应在发布前进行设置。如果提供,系统会首先检查代码库缓存是否存在具有给定哈希的文件;仅当未在缓存中找到相应文件时才会尝试下载。下载成功后,系统会将该文件添加到缓存中。
executable bool; 默认值为 False
在所创建的文件上设置可执行标志,默认为 false。
allow_fail bool; 默认值为 False
如果设置,请在返回值中指明错误,而不是在下载失败时引发错误。
canonical_id string; 默认值为 ''
如果设置了此字段,则将缓存命中限制为符合以下条件的情况:将文件添加到具有相同规范 ID 的缓存中。默认情况下,缓存使用校验和(sha256integrity)。
auth dict; 默认值为 {}
可选字典,用于指定部分网址的身份验证信息。
headers dict; 默认值为 {}
用于指定所有网址的 http 标头的可选字典。
integrity string; 默认值为 ''
预期已下载文件的校验和,采用子资源完整性格式。必须与所下载文件的校验和一致。由于远程文件可能会更改,因此省略校验和会带来安全风险。省略此字段最好会导致您的 build 变得非封闭。为了简化开发,您可以视需要进行设置,但应在发布前进行设置。如果提供了校验和,系统会首先检查存储库缓存中是否存在具有给定校验和的文件;仅当未在缓存中找到相应文件时才会尝试下载。下载成功后,系统会将该文件添加到缓存中。
block bool; 默认值为 True
如果设置为 false,该调用会立即返回,而不会返回常规返回值,而是返回一个包含单个方法(即 wait())的令牌,该方法会在下载完成之前阻塞,并返回常规返回值或正常抛出。

download_and_extract

struct module_ctx.download_and_extract(url, output='', sha256='', type='', stripPrefix='', allow_fail=False, canonical_id='', auth={}, headers={}, *, integrity='', rename_files={})

将文件下载到所提供网址的输出路径,并提取该文件,然后返回一个包含 success 的结构体。如果下载成功完成,该标志为 true;如果下载成功,则会返回一个包含 sha256integrity 字段的文件哈希值。

参数

参数 说明
url string;或 string 的 Iterable; 必需
引用同一文件的镜像网址列表。
output string;或标签;或 path; 默认值为 ''
用于解压缩归档文件的目录的路径(相对于代码库目录)。
sha256 string; 默认值为 ''
所下载文件的预期 SHA-256 哈希。此哈希值必须与所下载文件的 SHA-256 哈希值一致。省略 SHA-256 会带来安全风险,因为远程文件可能会发生变化。省略此字段最好会导致您的 build 变得非封闭。为了简化开发,您可以视需要进行设置,但应在发布前进行设置。如果提供,系统会首先检查代码库缓存是否存在具有给定哈希的文件;仅当未在缓存中找到相应文件时才会尝试下载。下载成功后,系统会将该文件添加到缓存中。
type string; 默认值为 ''
已下载文件的归档类型。默认情况下,归档类型根据网址的文件扩展名确定。如果文件没有扩展名,您可以明确指定“zip”“jar”“war”“aar”“tar”“tar.gz”“tgz”“tar.xz”“txz”“.tar.zst”“.tzst”“tar.bz2”或“.tbz”此处。
stripPrefix string; 默认值为 ''
要从提取的文件中删除的目录前缀。 许多归档都包含一个顶级目录,其中包含归档中的所有文件。您可以使用此字段从提取的文件中删除此前缀,而无需在 build_file 中反复指定此前缀。
allow_fail bool; 默认值为 False
如果设置,请在返回值中指明错误,而不是在下载失败时引发错误。
canonical_id string; 默认值为 ''
如果设置了此字段,则将缓存命中限制为符合以下条件的情况:将文件添加到具有相同规范 ID 的缓存中。默认情况下,缓存使用校验和 (sha256integrity)。
auth dict; 默认值为 {}
可选字典,用于指定部分网址的身份验证信息。
headers dict; 默认值为 {}
用于指定所有网址的 http 标头的可选字典。
integrity string; 默认值为 ''
预期已下载文件的校验和,采用子资源完整性格式。必须与所下载文件的校验和一致。由于远程文件可能会更改,因此省略校验和会带来安全风险。省略此字段最好会导致您的 build 变得非封闭。为了简化开发,您可以视需要进行设置,但应在发布前进行设置。如果提供了校验和,系统会首先检查存储库缓存中是否存在具有给定校验和的文件;仅当未在缓存中找到相应文件时才会尝试下载。下载成功后,系统会将该文件添加到缓存中。
rename_files dict; 默认值为 {}
可选的字典,用于指定在提取过程中要重命名的文件。在对目录前缀进行任何调整之前,系统会将名称完全匹配某个键的归档条目重命名为该值。这可用于提取包含非 Unicode 文件名的归档,或将提取到不区分大小写的文件系统中同一路径的文件的归档。

execute

exec_result module_ctx.execute(arguments, timeout=600, environment={}, quiet=True, working_directory="")

执行由参数列表指定的命令。该命令的执行时间受 timeout 限制(以秒为单位,默认为 600 秒)。此方法会返回包含命令输出的 exec_result 结构。environment 映射可用于替换某些要传递给进程的环境变量。

参数

参数 说明
arguments sequence; 必需
参数列表,第一个元素应该是要执行的程序的路径。
timeout int; 默认值为 600
命令的时长上限(以秒为单位,默认值为 600 秒)。
environment dict; 默认值为 {}
强制设置将某些环境变量传递给进程。
quiet bool; 默认值为 True
如果应输出 stdout 和 stderr 到终端。
working_directory string; 默认值为 ""
用于执行命令的工作目录。 可以是代码库根目录的相对路径,也可以是绝对路径。 默认值为代码库根目录。

extension_metadata

extension_metadata module_ctx.extension_metadata(root_module_direct_deps=None, root_module_direct_dev_deps=None, reproducible=False)

构建一个可从模块扩展程序的实现函数返回的不透明对象,以向 Bazel 提供扩展程序生成的代码库的元数据。

参数

参数 说明
root_module_direct_deps string 的序列;string;或 None; 默认值为 None
扩展程序认为是根模块的直接依赖项的代码库的名称。如果根模块导入其他代码库,或者未通过 use_repo 导入所有这些代码库,则 Bazel 会在评估扩展程序时输出警告,指示用户运行 bazel mod tidy 以自动修复 use_repo 调用。

此属性为 root_module_direct_deps 之一,并在评估扩展程序时输出警告和修复命令。

如果指定了 root_module_direct_depsroot_module_direct_dev_deps 中的一个,则必须也指定另一个。由这两个参数指定的列表必须是不相交的。

root_module_direct_depsroot_module_direct_dev_deps 只能有一项设置为特殊值 "all",系统会将其视为包含扩展程序生成的所有代码库名称的列表被指定为值。

root_module_direct_dev_deps string 的序列;string;或 None; 默认值为 None
扩展程序视为根模块的直接开发依赖项的代码库的名称。如果根模块导入其他代码库,或者未通过使用 use_extension(..., dev_dependency = True) 创建的扩展程序代理上的 use_repo 导入所有这些代码库,则 Bazel 会在评估扩展程序时输出警告,指示用户运行 bazel mod tidy 以自动修复 use_repo 调用。

如果指定了 root_module_direct_depsroot_module_direct_dev_deps 中的一个,则必须也指定另一个。由这两个参数指定的列表必须是不相交的。

root_module_direct_depsroot_module_direct_dev_deps 只能有一项设置为特殊值 "all",系统会将其视为包含扩展程序生成的所有代码库名称的列表被指定为值。

reproducible bool; 默认值为 False
声明此模块扩展可确保完全可重现,因此不应将其存储在锁定文件中。

extract

None module_ctx.extract(archive, output='', stripPrefix='', *, rename_files={}, watch_archive='auto')

将归档解压缩到代码库目录。

参数

参数 说明
archive string;或标签;或 path; 必需
将解压缩的归档文件的路径(相对于代码库目录)。
output string;或标签;或 path; 默认值为 ''
将解压缩到存档的目录的路径(相对于代码库目录)。
stripPrefix string; 默认值为 ''
要从解压缩的文件中删除的目录前缀。 许多归档都包含一个顶级目录,其中包含归档中的所有文件。您可以使用此字段从提取的文件中删除此前缀,而无需在 build_file 中反复指定此前缀。
rename_files dict; 默认值为 {}
可选的字典,用于指定在提取过程中要重命名的文件。在对目录前缀进行任何调整之前,系统会将名称完全匹配某个键的归档条目重命名为该值。这可用于提取包含非 Unicode 文件名的归档,或将提取到不区分大小写的文件系统中同一路径的文件的归档。
watch_archive string; 默认值为 'auto'
是否观看归档文件。可以是字符串“yes”、“no”或“auto”。传递“yes”相当于立即调用 watch() 方法;传递“no”不会尝试观看文件;传递“auto”只有在合法时才会尝试观看相关文件(如需了解详情,请参阅 watch() 文档)。

文件

None module_ctx.file(path, content='', executable=True, legacy_utf8=True)

在代码库目录中生成一个包含提供内容的文件。

参数

参数 说明
path string;或标签;或 path; 必需
要创建的文件的路径(相对于代码库目录)。
content string; 默认值为 ''
要创建的文件的内容,默认情况下为空。
executable bool; 默认值为 True
在所创建的文件上设置可执行标志,默认为 true。
legacy_utf8 bool; 默认值为 True
将文件内容编码为 UTF-8(默认为 true)。未来的版本将更改默认值并移除此参数。

getenv

string module_ctx.getenv(name, default=None)

如果环境变量 name 存在,则返回字符串值;如果不存在,则返回 default

增量构建时,对由 name 命名的变量值所做的任何更改都会导致系统重新获取此代码库。

参数

参数 说明
name string; 必需
所需环境变量的名称。
default string;或 None; 默认值为 None
找不到 name 时要返回的默认值。
可能会返回 None

is_dev_dependency

bool module_ctx.is_dev_dependency(tag)

返回是否对使用 devDependency = Trueuse_extension 调用的结果指定了给定的标记。

参数

参数 说明
tag bazel_module_tag; 必需
bazel_module.tags 获得的标记。

模块

list module_ctx.modules

外部依赖关系图中使用此模块扩展程序的所有 Bazel 模块的列表,每个模块都是一个 bazel_module 对象,用于公开它为此扩展程序指定的所有标记。该字典的迭代顺序必定与从根模块开始的广度优先搜索相同。

os

repository_os module_ctx.os

用于访问系统中信息的结构体。

路径

path module_ctx.path(path)

返回字符串、标签或路径中的路径。如果路径是相对路径,则将相对于代码库目录进行解析。如果路径是标签,则将解析为相应文件的路径。请注意,远程仓库在分析阶段执行,因此不能依赖于目标结果(标签应指向非生成的文件)。如果路径是路径,则将按原样返回该路径。

参数

参数 说明
path string;或标签;或 path; 必需
从其创建路径的 stringLabelpath

read

string module_ctx.read(path, *, watch='auto')

读取文件系统中文件的内容。

参数

参数 说明
path string;或标签;或 path; 必需
要读取的文件的路径。
watch string; 默认值为 'auto'
是否观看文件。可以是字符串“yes”、“no”或“auto”。传递“yes”相当于立即调用 watch() 方法;传递“no”不会尝试观看文件;传递“auto”只有在合法时才会尝试观看相关文件(如需了解详情,请参阅 watch() 文档)。

report_progress

None module_ctx.report_progress(status='')

更新提取此代码库或模块扩展程序的进度状态。

参数

参数 说明
status string; 默认值为 ''
string,用于描述提取进度的当前状态。

root_module_has_non_dev_dependency

bool module_ctx.root_module_has_non_dev_dependency

根模块是否将此扩展用作非开发依赖项。

手表

None module_ctx.watch(path)

指示 Bazel 监控对给定路径所做的更改,无论该路径是否存在,或者它是文件还是目录。对文件或目录所做的任何更改都将使此代码库或模块扩展程序失效,并导致系统下次重新提取或重新评估它。

“更改”包含对文件内容的更改(如果路径是文件);如果路径是文件,但现在是目录,或者相反;以及路径是开始还是停止存在。请注意,如果路径是目录,则这包括对该目录下的任何文件的更改。为此,请改用 path.readdir()

请注意,如果尝试监视当前正在提取的代码库内部或当前模块扩展程序的工作目录内部的路径,将会导致错误。模块扩展程序尝试监视当前 Bazel 工作区之外的路径也会导致错误。

参数

参数 说明
path string;或标签;或 path; 必需
要监控的文件的路径。

哪个

path module_ctx.which(program)

返回相应程序的 path;如果路径中没有此类程序,则返回 None

参数

参数 说明
program string; 必需
要在路径中查找的程序。
可能会返回 None