Как сделать в 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