diff options
author | Lukacs Berki <lberki@google.com> | 2015-07-07 08:15:23 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-07-07 08:42:42 +0000 |
commit | 130246293c7c36d6538c78e82b59cac343b37c48 (patch) | |
tree | 048242f6b5030594c07509276c235ab5cd8f8ec8 /src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java | |
parent | b21df3d2a022a24f66c88671ab7694c9b0d9735c (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.java | 16 |
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); } } } |