diff options
author | carmi <carmi@google.com> | 2017-03-31 04:08:20 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2017-03-31 17:13:10 +0200 |
commit | 98571f36260fa70043ea07820d6b19a8f9219500 (patch) | |
tree | a390348a756d726ac7390b3ab0316206cc852263 /src/main/java/com | |
parent | 6dd0292fb522f68ea18371107d68934c3f7eee22 (diff) |
Strict proto deps: handle direct protos in external repositories.
RELNOTES: None
PiperOrigin-RevId: 151786403
Diffstat (limited to 'src/main/java/com')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java index fd1f95f02e..7ed003bcc2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java @@ -341,27 +341,36 @@ public class ProtoCompileActionBuilder { ImmutableList.Builder<String> builder = ImmutableList.builder(); for (Artifact artifact : transitiveImports) { builder.add( - "-I" - + artifact - .getRootRelativePath() - .relativeTo( - artifact - .getOwnerLabel() - .getPackageIdentifier() - .getRepository() - .getPathUnderExecRoot()) - + "=" - + artifact.getExecPathString()); + "-I" + getPathIgnoringRepository(artifact) + "=" + artifact.getExecPathString()); } if (protosInDirectDependencies != null) { ArrayList<String> rootRelativePaths = new ArrayList<>(); for (Artifact directDependency : protosInDirectDependencies) { - rootRelativePaths.add(directDependency.getRootRelativePathString()); + rootRelativePaths.add(getPathIgnoringRepository(directDependency)); } builder.add("--direct_dependencies=" + Joiner.on(":").join(rootRelativePaths)); } return builder.build(); } + + /** + * Gets the artifact's path relative to the root, ignoring the external repository the artifact + * is at. For example, <code> + * //a:b.proto --> a/b.proto + * {@literal @}foo//a:b.proto --> a/b.proto + * </code> + */ + private static String getPathIgnoringRepository(Artifact artifact) { + return artifact + .getRootRelativePath() + .relativeTo( + artifact + .getOwnerLabel() + .getPackageIdentifier() + .getRepository() + .getPathUnderExecRoot()) + .toString(); + } } /** Signifies that a prerequisite could not be satisfied. */ |