Как сделать в starlark дорожку из нитки?

Я пишу код проверки для правила сборки bazel, и мне нужно выполнить проверку пути. Мне нужно проверить, существует ли определенный файл в том же каталоге, что и файл BUILD. Я замечаю, что есть атрибут контекста build_file_path который указывает на файл BUILD. Я хочу извлечь из него родительский каталог.

Похоже, я не могу создать новый path объект - я не вижу конструктора / инициализатора. Также кажется, что Starlark не поддерживаетos.path как python, потому что импорт не поддерживается.

Каков канонический способ получить родительский каталог строкового объекта, представляющего путь в Starlark?

2 ответа

Я не могу ответить на ваш последний вопрос, но, надеюсь, следующее поможет с первоначальной проблемой:

Вы можете использовать метку цели, для которой создается этот экземпляр правила, и найти его пакет. Это даст вам строку, представляющую родительский каталог файла BUILD.

т.е. ctx.label.package

load("@bazel_skylib//lib:paths.bzl", "paths")

paths.dirname(path_str)

См. https://github.com/bazelbuild/bazel-skylib/blob/main/docs/paths_doc.md

Другие вопросы по тегам