2017-05-12 15 views
5

w dokumentacji DefaultInfo, możemy teraz wrócić 3 różne „typy” z runfiles:Jakie są różne rodzaje runfiles

runfiles 
data_runfiles 
default_runfiles 

nie mogłem znaleźć żadnej dokumentacji, gdzie odstęp pomiędzy nimi jest i kiedy użyć, które. Czy ktokolwiek mógłby rozwinąć szczegóły?

Odpowiedz

4

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.

Powiązane problemy