我正在尝试使用proto编译器的skylark中的自定义规则。由于其工作方式的复杂性,我需要将路径拆分为外部依赖项的目录和相对于该目录的路径部分。
例1:
File:[/private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19[source]]external/googleapis/google/devtools/build/v1/build_status.proto
我想要路径:
/private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19/external/googleapis/
google/devtools/build/v1/build_status.proto
例2:
File:[[/private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19/execroot/bes_example]bazel-out/darwin_x86_64-fastbuild/genfiles]external/com_google_protobuf/google/protobuf/any.proto
我想要路径:
/private/var/tmp/_bazel_endobson/c56b77af296477cd0f319aa9d4ce1d19/execroot/bes_example/bazel-out/darwin_x86_64-fastbuild/genfiles/external/com_google_protobuf
google/protobuf/any.proto
问题在于,bazel允许访问路径的根和根相对部分,但不会深入了解路径是否具有“外部/”部分。协议缓冲区编译器需要这个,因为它需要从用户的角度知道与根目录对应的目录,以便它可以使用来自源的相对路径。
是否有一种原则性的方法可以检测到这一点,而不是狡猾地查看路径,看看它是否有“外部”?
答案 0 :(得分:0)
我担心我不能在这里给你一个非常好的答案:(最后,我们要删除"外部"路径段,但它没有发生然而。目前的规则是你有源文物,但你没有它用于生成的工件。
因此,我所做的正是你的建议 - 检查第一个路段是"外部"。