aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar carmi <carmi@google.com>2017-03-31 04:08:20 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2017-03-31 17:13:10 +0200
commit98571f36260fa70043ea07820d6b19a8f9219500 (patch)
treea390348a756d726ac7390b3ab0316206cc852263 /src/main/java/com
parent6dd0292fb522f68ea18371107d68934c3f7eee22 (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.java33
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. */