Правило репозитория Bazel — загрузка файла в relay_ctx.execute

У меня есть тест Java, который я пытаюсь запустить в песочнице, который выполняет несколько сложную логику загрузки.
Я думаю написать правило репозитория, которое просто запускает приложение Java, используя repository_ctx.execute для запуска этой логики, вместо того, чтобы дублировать ее в жаворонок.

Как мне получить содержимое этого вызова?
Я могу передать приложению java путь/имя файла для загрузки файла, но тогда я не уверен, какой путь указать. Возможно, я могу вывести байты на стандартный вывод и собрать их через exec_result (звучит ужасно).


person Ittai    schedule 13.07.2017    source источник


Ответы (1)


Вы можете использовать repository_ctx.path("path/to/file"), который возвращает путь, чтобы получить путь относительно сгенерированного рабочего пространства, затем с помощью path.realpath вы может получить каноническое имя для вывода.

Сбор вывода exec_result для использования в качестве входного файла должен работать, но, насколько мне известно, он никогда не пробовался, поэтому может возникнуть странная проблема с кодировкой.

person Damien Martin-Guillerez    schedule 14.07.2017
comment
Это может быть несуществующий путь, верно? Если я сделаю repo_ctx.path(downloads/MySQL.installer) и попрошу инструмент загрузить, будет ли это выходом правила? Последняя часть: может ли каталог быть выходом? Спасибо! - person Ittai; 14.07.2017
comment
Я не понимаю, будет ли это выходом правила? вопрос. Это может быть несуществующий путь, и тогда инструмент должен его создать. - person Damien Martin-Guillerez; 14.07.2017
comment
НМ. Я понял, что файл BUILD, который я создаю, должен объявить группу файлов для каталога, что сделает его выходом правила. Спасибо. - person Ittai; 14.07.2017