aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-07-07 08:15:23 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-07-07 08:42:42 +0000
commit130246293c7c36d6538c78e82b59cac343b37c48 (patch)
tree048242f6b5030594c07509276c235ab5cd8f8ec8 /src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
parentb21df3d2a022a24f66c88671ab7694c9b0d9735c (diff)
Make absolute labels in remote repositories refer to the same repository by default.
If we do otherwise, this makes it impossible to seamlessly move code from the main repository to another one, because if two targets (one depending another) were moved, the dependency edge would still point back to the main repository. -- MOS_MIGRATED_REVID=97650057
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
index 906447b925..52f78abc80 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.packages;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.syntax.Label;
+import com.google.devtools.build.lib.vfs.PathFragment;
import javax.annotation.Nullable;
@@ -154,7 +155,20 @@ public abstract class AbstractAttributeMapper implements AttributeMap {
Object value = get(attribute.getName(), type);
if (value != null) { // null values are particularly possible for computed defaults.
for (Label label : type.getLabels(value)) {
- observer.acceptLabelAttribute(label, attribute);
+ Label absoluteLabel;
+ if (attribute.isImplicit() || attribute.isLateBound()) {
+ // Implicit dependencies are not usually present in remote repositories. They are
+ // generally tools, which go to the main repository.
+ absoluteLabel = label;
+ } else if (label.getPackageIdentifier().getRepository().isDefault()
+ && label.getPackageIdentifier().getPackageFragment().equals(
+ new PathFragment("visibility"))) {
+ // //visibility: labels must also be special-cased :(
+ absoluteLabel = label;
+ } else {
+ absoluteLabel = ruleLabel.resolveRepositoryRelative(label);
+ }
+ observer.acceptLabelAttribute(absoluteLabel, attribute);
}
}
}