aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 656ca2595f..4efcf035ac 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -87,6 +87,7 @@ import com.google.devtools.build.lib.util.OrderedSetMultimap;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.StringUtil;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.Collection;
@@ -592,6 +593,19 @@ public final class RuleContext extends TargetContext
* thus guaranteeing that it never clashes with artifacts created by rules in other packages.
*/
public Artifact getPackageRelativeArtifact(PathFragment relative, Root root) {
+ // TODO: other root types, is this never a main repo?
+ if (relative.startsWith(new PathFragment(Label.EXTERNAL_PATH_PREFIX))) {
+ // This is an external path, use a different root.
+ if (root.isSourceRoot()) {
+ root = Root.asSourceRoot(root.getPath().getRelative(relative.subFragment(0, 2)));
+ } else {
+ boolean isMainRepo = false;
+ Path newExecRoot = root.getExecRoot().getRelative(relative.subFragment(0, 2));
+ root = Root.asDerivedRoot(
+ newExecRoot, newExecRoot.getRelative(root.getExecPath()), isMainRepo);
+ }
+ relative = relative.subFragment(2, relative.segmentCount());
+ }
return getDerivedArtifact(getPackageDirectory().getRelative(relative), root);
}
@@ -610,7 +624,7 @@ public final class RuleContext extends TargetContext
* {@link #getUniqueDirectoryArtifact(String, PathFragment, Root)}) ensures that this is the case.
*/
public PathFragment getPackageDirectory() {
- return getLabel().getPackageIdentifier().getSourceRoot();
+ return getLabel().getPackageIdentifier().getPackageFragment();
}
/**