如何解析路径相对于工作区在Bazel?



local_repositorynew_local_repository都以路径作为参数,并且这些路径相对于工作空间进行解析。

local_repository(
name = "my-ssl",
path = "../ssl", # relative to workspace
)

我试图为自定义存储库规则获得类似的行为,但我不能弄清楚。

似乎所有的repository_ctx函数都相对于存储库而不是工作空间进行操作。

my_repository(
name = "my-ssl",
path = "../ssl", # how can my rule resolve that path
)

如何解决相对于工作区的路径参数,就像内置的存储库规则一样?

一种选择是使用Label("//:WORKSPACE")来获取工作空间目录,并将其与您的相对路径组合在一起:

def _impl(repository_ctx):
workspace_dir = repository_ctx.path(Label("//:WORKSPACE")).dirname
repo_dir_str = '/'.join([str(workspace_dir), repository_ctx.attr.path])
print(repo_dir_str)
repo_dir = repository_ctx.path(repo_dir_str)
print(repo_dir)
print(repo_dir.exists)

my_repository = repository_rule(
implementation = _impl,
attrs = {
"path": attr.string(mandatory = True),
}
)
如果需要,工作区也可以是一个属性:
my_repository = repository_rule(
implementation = _impl,
attrs = {
"path": attr.string(mandatory = True),
"workspace": attr.label(default = Label("//:WORKSPACE")),
}
)

相关内容

  • 没有找到相关文章