module_ctx

模块扩展程序的上下文,其中包含辅助函数以及有关依赖关系图中的相关标记的信息。创建模块扩展程序时,您会获得一个 module_ctx 对象作为 implementation 函数的实参。

成员

下载

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

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

参数

参数 说明
url 字符串;或字符串的可迭代对象; 必需
引用同一文件的镜像网址列表。
output 字符串;或标签;或路径; 默认值为''
输出文件的路径,相对于代码库目录。
sha256 默认值为 ''
下载的文件的预期 SHA-256 哈希值。此值必须与下载的文件的 SHA-256 哈希值一致。省略 SHA-256 会带来安全风险,因为远程文件可能会发生更改。省略此字段最多只会使您的构建不具有密封性。为了方便开发,您可以选择省略此字段,但应在发布之前设置此字段。
executable 默认值为 False
在创建的文件上设置可执行标志,默认值为 false。
allow_fail 默认值为 False
如果设置此标志,则在下载失败时,会在返回值中指明错误,而不是抛出错误
canonical_id 默认值为 ''
如果设置此标志,则仅当文件使用相同的规范 ID 添加到缓存时,才会发生缓存命中
auth 默认值为 {}
一个可选字典,用于指定某些网址的身份验证信息。
integrity 默认值为 ''
下载的文件的预期校验和,采用子资源完整性格式。此值必须与下载的文件的校验和一致。省略校验和会带来安全风险,因为远程文件可能会发生更改。省略此字段最多只会使您的构建不具有密封性。为了方便开发,您可以选择省略此字段,但应在发布之前设置此字段。

download_and_extract

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

将文件下载到所提供网址的输出路径,对其进行提取,并返回一个结构体,其中包含 success(一个标志,如果下载成功完成,则为 true)以及文件的哈希值(如果下载成功,则包含 sha256integrity 字段)。

参数

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

execute

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

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

参数

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

extension_metadata

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

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

参数

参数 说明
root_module_direct_deps 字符串序列;或字符串;或None; 默认值为None
扩展程序认为根模块的直接依赖项的代码库的名称。如果根模块导入其他代码库,或者未通过 use_repo 导入所有这些代码库,则 Bazel 在评估扩展程序时会输出警告和修复命令。

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

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

root_module_direct_dev_deps 字符串序列;或字符串;或; 默认值为 扩展程序认为根模块的直接开发依赖项的代码库的名称。NoneNone
如果根模块导入其他代码库,或者未通过使用 use_extension(..., dev_dependency = True) 创建的扩展程序代理导入所有这些代码库,则 Bazel 在评估扩展程序时会输出警告和修复命令。use_repo

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

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

file

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

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

参数

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

is_dev_dependency

bool module_ctx.is_dev_dependency(tag)

返回是否在 use_extension 调用的结果中指定了给定标记,并带有 devDependency = True

参数

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

modules

list module_ctx.modules

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

os

repository_os module_ctx.os

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

path

path module_ctx.path(path)

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

参数

参数 说明
path 字符串;或标签;或路径; 必需
用于创建路径的字符串、标签或路径

read

string module_ctx.read(path)

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

参数

参数 说明
path 字符串;或标签;或路径; 必需
要从中读取的文件的路径。

report_progress

None module_ctx.report_progress(status='')

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

参数

参数 说明
status 字符串; 默认值为 ''
描述提取进度当前状态的字符串

root_module_has_non_dev_dependency

bool module_ctx.root_module_has_non_dev_dependency

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

which

path module_ctx.which(program)

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

参数

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