代码库 ctx

报告问题 查看源代码 每夜 build · 7.4 . 7.3 · 7.2 · 7.1敬上 · 7.0敬上 · 6.5

包含辅助函数和属性相关信息的代码库规则的上下文。创建代码库规则时,您会获得一个 repository_ctx 对象,该对象将作为 implementation 函数的参数。

成员

attr

struct repository_ctx.attr

用于访问属性值的结构体。这些值由用户提供(如果未提供,则使用默认值)。

删除

bool repository_ctx.delete(path)

删除文件或目录。返回布尔值,指示此调用是否实际删除了文件或目录。

参数

参数 说明
path 字符串;或路径; 必需
要删除的文件的路径(相对于代码库目录)或绝对路径。可以是路径或字符串。

下载

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

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

参数

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

download_and_extract

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

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

参数

参数 说明
url 字符串;或字符串的可迭代对象; 必需
引用同一文件的镜像网址列表。
output 字符串;或标签;或路径; 默认值为 ''
将要解压缩归档文件的目录的路径(相对于代码库目录)。
sha256 默认值为 ''
,表示下载文件的预期 SHA-256 哈希值。此哈希值必须与所下载文件的 SHA-256 哈希值一致。省略 SHA-256 会带来安全风险,因为远程文件可能会发生变化。省略此字段的效果充其量是使您的 build 不具有密封性。此属性是可选的,可简化开发流程,但应在发布前进行设置。系统会先检查代码库缓存中是否有具有给定哈希的文件(如果已提供);只有在缓存中找不到该文件时,才会尝试下载。下载成功后,系统会将文件添加到缓存中。
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 默认值为 {}
可选字典,用于指定部分网址的身份验证信息。
headers 默认值为 {}
一个可选字典,用于指定所有网址的 HTTP 标头。
integrity 默认为 ''
下载的文件的预期校验和,采用子资源完整性格式。必须与所下载文件的校验和一致。由于远程文件可能会更改,因此省略校验和会带来安全风险。省略此字段最好会导致您的 build 变得非封闭。此属性是可选的,可简化开发流程,但应在发布前进行设置。
rename_files 默认值为 {}
可选的字典,用于指定在提取过程中要重命名的文件。在调整任何目录前缀之前,名称与键完全匹配的归档条目将重命名为相应值。这可用于提取包含非 Unicode 文件名的归档,或将提取到不区分大小写的文件系统中同一路径的文件的归档。

execute

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

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

参数

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

extract

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

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

参数

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

文件

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

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

参数

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

getenv

string repository_ctx.getenv(name, default=None)

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

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

参数

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

name

string repository_ctx.name

此规则创建的外部代码库的名称。

os

repository_os repository_ctx.os

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

patch

None repository_ctx.patch(patch_file, strip=0, *, watch_patch='auto')

将补丁文件应用到外部代码库的根目录。补丁文件应为标准的统一差异格式文件。Bazel 原生补丁实现不支持模糊匹配和二进制补丁(如补丁命令行工具)。

参数

参数 说明
patch_file 字符串;或标签;或路径; 必需
要应用的补丁文件,可以是标签、相对路径或绝对路径。如果是相对路径,则会解析为代码库目录。
strip 默认值为 0
从文件名中删除指定数量的前导组件。
watch_patch 默认值为 'auto'
是否监控补丁文件。可以是字符串“yes”“no”或“auto”。传递“yes”相当于立即调用 watch() 方法;传递“no”表示不会尝试监控文件;传递“auto”表示仅在合法的情况下尝试监控文件(如需了解详情,请参阅 watch() 文档)。

路径

path repository_ctx.path(path)

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

参数

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

read

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

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

参数

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

report_progress

None repository_ctx.report_progress(status='')

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

参数

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

None repository_ctx.symlink(target, link_name)

在文件系统上创建符号链接。

参数

参数 说明
target 字符串;或标签;或路径; 必需
符号链接应指向的路径。
string;或标签;或 path; 必需
要创建的符号链接的路径。

模板

None repository_ctx.template(path, template, substitutions={}, executable=True, *, watch_template='auto')

使用 template 生成新文件。substitutions 的键每次出现在 template 中时,都会替换为相应的值。结果会写入 path。可选的 executable 参数(默认为 true)可用于开启或关闭可执行位。

参数

参数 说明
path 字符串;或标签;或路径; 必需
要创建的文件相对于代码库目录的路径。
template 字符串;或标签;或路径; 必需
模板文件的路径。
substitutions 默认值为 {}
在展开模板时要进行的替换。
executable 默认为 True
为创建的文件设置可执行标志,默认为 true。
watch_template 默认为 'auto'
是否监控模板文件。可以是字符串“yes”、“no”或“auto”。传递“yes”等同于立即调用 watch() 方法;传递“no”不会尝试观看文件;传递“auto”只会在合法时尝试观看文件(如需了解详情,请参阅 watch() 文档)。

手表

None repository_ctx.watch(path)

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

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

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

参数

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

watch_tree

None repository_ctx.watch_tree(path)

指示 Bazel 监控给定路径下所有文件或目录的传递性更改。对文件内容、文件或目录的存在性、文件名或目录名的任何更改都会导致系统重新提取此代码库。

请注意,尝试监控当前正在提取的代码库内的路径将会导致错误。

参数

参数 说明
path 字符串;或标签;或路径; 必需
要监控的目录树的路径。

哪个

path repository_ctx.which(program)

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

参数

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

workspace_root

path repository_ctx.workspace_root

指向 bazel 调用的根工作区的路径。