Есть ли способ увидеть мнемонику выполняемых действий Bazel?

(Из https://groups.google.com/d/msg/bazel-discuss/XrtKLhH1bgI/B9xZn_aVAAAJ)

В нашем проекте, который использует Bazel для сборки, я использую удаленный кеш (--spawn_strategy=remote), и нам нужно выполнить некоторую тонкую настройку, чтобы отключить кеш для определенных действий. Например, когда мы генерируем tar-файлы, мы не хотим использовать удаленный кеш, потому что (а) создание файлов tar локально так же быстро, как и их загрузка, и (б) некоторые из наших файлов tar могут быть действительно огромными.

Поэтому я хотел бы, чтобы наши файлы .bazelrc указывали другую стратегию для некоторых действий, например --strategy=PackageTar=standalone.

Вот сложная часть: чтобы переопределить стратегию, вам нужно знать мнемонику. Например. для правила pkg_tar соответствующее действие имеет мнемонику PackageTar. Я нашел это в исходнике bazel. Некоторые другие понять немного сложнее.

Есть ли способ заставить bazel сообщать мне мнемонику выполняемых им действий? Я рассмотрел множество вариантов, таких как --profile, --explain, --verbose_explanations, --subcommands, но не смог найти способ.


person László    schedule 12.06.2017    source источник
comment
Извините, что спросил от вашего имени, я понял, что это была плохая идея, потому что теперь вы не владеете вопросом и не получаете за него вознаграждение.   -  person László    schedule 13.06.2017
comment
Может быть, лучше сказать людям, чтобы они спросили еще раз о Stackoverflow. Хотя приятно просить людей, я бы предпочел, чтобы люди научились работать со Stackoverflow.   -  person abergmeier    schedule 14.06.2017
comment
Ага, согласен, сделаю это в будущем.   -  person László    schedule 14.06.2017


Ответы (2)


Это можно сделать с помощью bazel aquery:

$ cat BUILD
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")

pkg_tar(
    name = "my_archive",
    srcs = ["hello.txt"],
)
$ bazel aquery :my_archive 2>/dev/null
action 'Writing file my_archive.args'
  Mnemonic: FileWrite
  Target: //:my_archive
  Configuration: k8-fastbuild
  ActionKey: 3dafce6be7ba0023b7eaae485085f977
  Inputs: []
  Outputs: [bazel-out/k8-fastbuild/bin/my_archive.args]

action 'PackageTar my_archive.tar'
  Mnemonic: PackageTar
  Target: //:my_archive
  Configuration: k8-fastbuild
  ActionKey: 86bd5d0e112232cf0224fd0e3534f553
  Inputs: [<snip>]
  Outputs: [bazel-out/k8-fastbuild/bin/my_archive.tar]
  Command Line: (exec bazel-out/host/bin/external/bazel_tools/tools/build_defs/pkg/build_tar \
    --flagfile \
    bazel-out/k8-fastbuild/bin/my_archive.args)

Обратите внимание на строку Mnemonic: PackageTar во втором действии.

Вы можете использовать --output=textproto параметр для bazel aquery, чтобы сделать их машиночитаемыми вывод.

Вы также можете использовать такие запросы, как bazel aquery 'outputs(".*\.tar", //...)', чтобы сузить график действий; За подробностями обращайтесь к aquery документам.

person wchargin    schedule 12.07.2019

К сожалению, Базель нигде не сообщает мнемонику.

Вы можете найти список доступных мнемоник, нажав их в источнике.

В правилах Skylark:

cd <bazel_src_dir>
find -name '*.bzl' -not -path '*.git/*' -and -not -path '*/test/*' -type f | xargs grep 'mnemonic\s*='

В нативных правилах:

cd <bazel_src_dir>
find src/main/java -name '*.java' -type f | xargs grep -A1 'String getMnemonic()'
person László    schedule 13.06.2017