Мне не ясно, в чем разница между transitive_files и PyInfo transitive_sources файлов запуска DefaultInfo. Являются ли они избыточными или есть важное различие?
Например, у меня есть пользовательское правило starlark, которое я хочу использовать в качестве поставщика PyInfo, но я хочу добавить дополнительного поставщика, чтобы не использовать Собственное правило py_library.
transitive_sources = [dep[PyInfo].transitive_sources for dep in ctx.attr.deps]
return struct(providers = [
DefaultInfo(
files = depset(sources + outs),
runfiles = ctx.runfiles(files = sources + outs, transitive_files = transitive_sources)
),
PyInfo(
transitive_sources = depset(direct = sources + outs, transitive = transitive_sources),
imports = depset(
direct = [_path_join(ctx.workspace_name, ctx.label.package, im) for im in ctx.attr.imports],
transitive = [dep[PyInfo].imports for dep in ctx.attr.deps]
)
),
_EggLibraryInfo(aditional_info="other stuff"),
])
Я создаю избыточные депозиты, чтобы удовлетворить этих поставщиков, что заставляет меня думать, что, возможно, я делаю это неправильно.
Я также попробовал другой метод зацикливания по всем default_runfiles
из deps и используя runfiles.merge для DefaultInfo. В простых случаях эти методы выглядят эквивалентно, но я не знаю, существуют ли другие сценарии ios, в которых подходы расходятся.
В документации PyInfo может использоваться раздел о том, как transitive_sources вписывается в DefaultInfo, и почему необходимо предоставить дополнительные механизмы за пределами runfiles. https://docs.bazel.build/versions/master/skylark/lib/PyInfo.html