data_runfiles
to pliki, które są dodawane do runfiles pliku binarnego, który zależy od reguły za pomocą atrybutu data
. default_runfiles
są plikami, które są dodawane do runfiles pliku binarnego, który zależy od reguły przez cokolwiek oprócz atrybutu data
. runfiles
są skrótem do tworzenia DefaultInfo
, który ma ten sam zestaw plików działających zarówno jako data_runfiles
i default_runfiles
.
Rozważmy następujący przykład dotyczący reguły filegroup
. (Nie jestem do końca pewien dlaczego filegroup
troski czy jest czy nie jest przywoływane przez atrybut data
, ale to robi i to sprawia, prosty przykład.)
# BUILD
filegroup(
name = "a",
srcs = ["b"],
data = ["c"],
)
sh_binary(
name = "bin1",
srcs = ["bin.sh"],
deps = [":a"],
)
sh_binary(
name = "bin2",
srcs = ["bin.sh"],
data = [":a"],
)
# bin.sh
ls
Uważamy, że plik b
jest w runfiles z :bin2
ale nie :bin1
.
$ bazel run //:bin1
bin1
bin.sh
c
$ bazel run //:bin2
b
bin2
bin.sh
c
Teraz pozwala spojrzeć na bezpośrednio default_runfiles
i data_runfiles
.
# my_rule.bzl
def _impl(ctx):
print(ctx.attr.dep.default_runfiles.files)
print(ctx.attr.dep.data_runfiles.files)
my_rule = rule(
implementation = _impl,
attrs = {"dep": attr.label()},
)
# BUILD
load("//:my_rule.bzl", "my_rule")
my_rule(name = "foo", dep = ":a")
$ bazel build //:foo
WARNING: /usr/local/google/home/ajmichael/playgrounds/runfiles/my_rule.bzl:2:3: depset([File:[/usr/local/google/home/ajmichael/playgrounds/runfiles[source]]c]).
WARNING: /usr/local/google/home/ajmichael/playgrounds/runfiles/my_rule.bzl:3:3: depset([File:[/usr/local/google/home/ajmichael/playgrounds/runfiles[source]]b, File:[/usr/local/google/home/ajmichael/playgrounds/runfiles[source]]c]).
INFO: Found 1 target...
Target //:foo up-to-date (nothing to build)
INFO: Elapsed time: 0.194s, Critical Path: 0.00s
Jak widać, default_runfiles
zawiera tylko c
podczas data_runfiles
zawiera zarówno b
i c
.