module_ctx

报告问题 查看来源 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

包含辅助函数和有关依赖关系图中相关标记的信息的模块扩展的上下文。创建模块扩展时,您会获得一个 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 字段)。如果 sha256integrity 是用户指定的,强烈建议您设置显式 canonical_id。例如 get_default_canonical_id

参数

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

download_and_extract

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

将文件下载到指定网址的输出路径,提取文件,并返回一个包含 success 的结构体,如果下载成功完成,则该标志为 true;如果下载成功,则返回一个包含字段 sha256integrity 的文件哈希。如果 sha256integrity 是用户指定的,强烈建议您设置显式 canonical_id。例如 get_default_canonical_id

参数

参数 说明
url 字符串;或 字符串的可迭代对象; 必需
引用同一文件的镜像网址列表。
output 字符串;或 Label;或 path; 默认值为 ''
相对于代码库目录的归档解压缩目录的路径。
sha256 字符串; 默认值为 ''
下载的文件的预期 SHA-256 哈希值。此值必须与下载的文件的 SHA-256 哈希值一致。省略 SHA-256 会带来安全风险,因为远程文件可能会发生更改。省略此字段最多只会导致您的 build 变为非密封 build。为了方便开发,此属性为可选属性,但应在发布前设置。如果提供了哈希,系统会先检查代码库缓存中是否存在具有指定哈希的文件;只有在缓存中未找到该文件时,才会尝试下载。成功下载后,文件将添加到缓存中。
type string; 默认值为 ''
下载文件的归档类型。默认情况下,系统会根据网址的文件扩展名确定归档类型。如果文件没有扩展名,您可以在此处明确指定“zip”“jar”“war”“aar”“nupkg”“tar”“tar.gz”“tgz”“tar.xz”“txz”“.tar.zst”“.tzst”“tar.bz2”“tbz”“ar”或“.deb”。
strip_prefix 字符串; 默认值为 ''
要从提取的文件中剥离的目录前缀。许多归档文件都包含一个顶级目录,其中包含归档文件中的所有文件。无需在 build_file 中反复指定此前缀,而是可以使用此字段从提取的文件中剥离该前缀。

为了实现兼容性,此参数也可以使用已弃用的名称 stripPrefix

allow_fail bool; 默认值为 False
如果设置,则在返回值中指示错误,而不是针对下载失败引发错误。
canonical_id 字符串; 默认值为 ''
如果设置,则将缓存命中限制为文件添加到缓存时具有相同规范 ID 的情况。默认情况下,缓存使用校验和(sha256integrity)。
auth dict;默认值为 {}
一个可选的字典,用于指定部分网址的身份验证信息。
headers dict; 默认值为 {}
一个可选的字典,用于指定所有网址的 HTTP 标头。
integrity 字符串; 默认值为 ''
下载文件的预期校验和,采用子资源完整性格式。此值必须与下载的文件的校验和一致。省略校验和存在安全风险,因为远程文件可能会发生更改。省略此字段最多只会导致您的 build 变为非密封 build。为了方便开发,此属性为可选属性,但应在发布前设置。如果提供了校验和,系统会先检查代码库缓存中是否存在具有指定校验和的文件;只有在缓存中未找到该文件时,才会尝试下载。成功下载后,文件将添加到缓存中。
rename_files 字典; 默认值为 {}
一个可选的字典,用于指定在提取期间要重命名的文件。在进行任何目录前缀调整之前,名称与键完全匹配的归档条目将重命名为相应的值。此选项可用于提取包含非 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; 默认值为 {}
强制将某些环境变量设置为传递给进程。该值可以是 None,以移除环境变量。
quiet bool; 默认值为 True
是否应将 stdout 和 stderr 输出到终端。
working_directory 字符串; 默认值为 ""
执行命令的工作目录。 可以是相对于代码库根目录的路径,也可以是绝对路径。 默认目录为代码库的根目录。

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 字符串序列;或字符串;或 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 字符串序列;或字符串;或 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='', strip_prefix='', *, rename_files={}, watch_archive='auto')

将归档提取到代码库目录。

参数

参数 说明
archive 字符串;或标签;或路径;必需
要解压缩的归档的路径(相对于代码库目录)。
output 字符串;或 Label;或 路径; 默认值为 ''
相对于代码库目录的归档解压缩目录的路径。
strip_prefix 字符串; 默认值为 ''
要从提取的文件中剥离的目录前缀。许多归档文件都包含一个顶级目录,其中包含归档文件中的所有文件。无需在 build_file 中反复指定此前缀,而是可以使用此字段从提取的文件中剥离该前缀。

为了实现兼容性,此参数也可以使用已弃用的名称 stripPrefix

rename_files 字典; 默认值为 {}
一个可选的字典,用于指定在提取期间要重命名的文件。在进行任何目录前缀调整之前,名称与键完全匹配的归档条目将重命名为相应的值。此选项可用于提取包含非 Unicode 文件名的归档文件,或提取在不区分大小写的文件系统上会提取到同一路径的文件。
watch_archive string; 默认值为 'auto'
是否监控归档文件。可以是字符串“yes”“no”或“auto”。传递“yes”相当于立即调用 watch() 方法;传递“no”不会尝试监视文件;传递“auto”仅会在合法的情况下尝试监视文件(如需了解详情,请参阅 watch() 文档)。

文件

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

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

参数

参数 说明
path 字符串;或标签;或路径;必需
要创建的文件的路径(相对于代码库目录)。
content 字符串; 默认值为 ''
要创建的文件的内容,默认为空。
executable bool; 默认值为 True
在创建的文件上设置可执行标志,默认为 true。
legacy_utf8 bool; 默认值为 False
无操作。此参数已弃用,并将在未来的 Bazel 版本中移除。

getenv

string module_ctx.getenv(name, default=None)

以字符串形式返回环境变量 name 的值(如果存在),否则返回 default

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

参数

参数 说明
name 字符串; 必需
所需环境变量的名称。
default 字符串;或 None; 默认值为 None
如果找不到 name,则返回的默认值。
可能会返回 None

is_dev_dependency

bool module_ctx.is_dev_dependency(tag)

返回给定的标记是否在 use_extension 调用(使用 devDependency = True)的结果中指定。

参数

参数 说明
tag bazel_module_tag; required
bazel_module.tags 获取的标记。

模块

list module_ctx.modules

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

os

repository_os module_ctx.os

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

路径

path module_ctx.path(path)

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

参数

参数 说明
path string;或 Label;或 path;必需
用于创建路径的 stringLabelpath

read

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

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

参数

参数 说明
path string;或 Label;或 path; 必需
要读取的文件的路径。
watch string; default is 'auto'
Whether to watch the file. 可以是字符串“yes”“no”或“auto”。传递“yes”相当于立即调用 watch() 方法;传递“no”不会尝试监视文件;传递“auto”仅会在合法的情况下尝试监视文件(如需了解详情,请参阅 watch() 文档)。

report_progress

None module_ctx.report_progress(status='')

更新提取相应代码库或模块扩展服务的进度状态。

参数

参数 说明
status 字符串; 默认值为 ''
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 字符串;或标签;或路径; 必需
要监控的文件的路径。

哪个

path module_ctx.which(program)

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

参数

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