From a8d7357b7dc66e0531c298e4d369e6342fcf94b7 Mon Sep 17 00:00:00 2001 From: dannark Date: Thu, 21 Jun 2018 17:46:06 -0700 Subject: Audit usages of Label.getRelative and update to Label.getRelativeWithRemapping RELNOTES: None PiperOrigin-RevId: 201617188 --- .../google/devtools/build/lib/analysis/LabelExpander.java | 3 ++- .../lib/analysis/skylark/SkylarkRuleClassFunctions.java | 6 +++++- .../com/google/devtools/build/lib/packages/BuildType.java | 5 +++-- .../com/google/devtools/build/lib/rules/cpp/CppHelper.java | 6 +++++- .../google/devtools/build/lib/rules/cpp/CppOptions.java | 3 ++- .../devtools/build/lib/rules/cpp/CppToolchainInfo.java | 14 ++++++++------ .../google/devtools/build/lib/syntax/SkylarkImports.java | 8 ++++++-- 7 files changed, 31 insertions(+), 14 deletions(-) (limited to 'src/main/java/com') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java b/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java index bac4c0a52b..c741275dc3 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.analysis; import com.google.common.base.CharMatcher; import com.google.common.base.Preconditions; import com.google.common.base.Strings; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.cmdline.Label; @@ -153,7 +154,7 @@ public final class LabelExpander { */ private static Label resolveLabelText(String labelText, Label labelResolver) { try { - return labelResolver.getRelative(labelText); + return labelResolver.getRelativeWithRemapping(labelText, ImmutableMap.of()); } catch (LabelSyntaxException e) { // It's a heuristic, so quietly ignore "errors". Because Label.getRelative never // returns null, we can use null to indicate an error. diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java index 249c6b6ab2..ddc6ab5689 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java @@ -670,7 +670,11 @@ public class SkylarkRuleClassFunctions implements SkylarkRuleFunctionsApi linkopts, String labelName) { try { - Label label = ruleContext.getLabel().getRelative(labelName); + Label label = + ruleContext + .getLabel() + .getRelativeWithRemapping( + labelName, ruleContext.getRule().getPackage().getRepositoryMapping()); for (String prereqKind : LINKOPTS_PREREQUISITE_LABEL_KINDS) { for (TransitiveInfoCollection target : ruleContext .getPrerequisitesIf(prereqKind, Mode.TARGET, FileProvider.class)) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java index ac7a1f6e31..33a3112b84 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java @@ -104,7 +104,8 @@ public class CppOptions extends FragmentOptions { throw new OptionsParsingException("Not a label"); } try { - return Label.parseAbsolute(input).getRelative(LIBC_RELATIVE_LABEL); + return Label.parseAbsolute(input) + .getRelativeWithRemapping(LIBC_RELATIVE_LABEL, ImmutableMap.of()); } catch (LabelSyntaxException e) { throw new OptionsParsingException(e.getMessage()); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java index 7849ea52a6..1396779f83 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppToolchainInfo.java @@ -199,14 +199,16 @@ public final class CppToolchainInfo { crosstoolInfo.getLdEmbedFlags(), crosstoolInfo.getObjcopyEmbedFlags(), toolchainLabel, - toolchainLabel.getRelative( + toolchainLabel.getRelativeWithRemapping( !crosstoolInfo.getStaticRuntimesFilegroup().isEmpty() ? crosstoolInfo.getStaticRuntimesFilegroup() - : "static-runtime-libs-" + crosstoolInfo.getTargetCpu()), - toolchainLabel.getRelative( + : "static-runtime-libs-" + crosstoolInfo.getTargetCpu(), + ImmutableMap.of()), + toolchainLabel.getRelativeWithRemapping( !crosstoolInfo.getDynamicRuntimesFilegroup().isEmpty() ? crosstoolInfo.getDynamicRuntimesFilegroup() - : "dynamic-runtime-libs-" + crosstoolInfo.getTargetCpu()), + : "dynamic-runtime-libs-" + crosstoolInfo.getTargetCpu(), + ImmutableMap.of()), "_solib_" + crosstoolInfo.getTargetCpu(), crosstoolInfo.getAbiVersion(), crosstoolInfo.getTargetSystemName(), @@ -224,8 +226,8 @@ public final class CppToolchainInfo { crosstoolInfo.supportsGoldLinker(), crosstoolInfo.needsPic()); } catch (LabelSyntaxException e) { - // All of the above label.getRelative() calls are valid labels, and the crosstool_top - // was already checked earlier in the process. + // All of the above label.getRelativeWithRemapping() calls are valid labels, and the + // crosstool_top was already checked earlier in the process. throw new AssertionError(e); } } diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java index 6cedeed40a..36c5ae4166 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java @@ -142,7 +142,9 @@ public class SkylarkImports { PathFragment.create(containingFileLabel.getName()).getParentDirectory(); String targetNameForImport = containingDirInPkg.getRelative(importFile).toString(); try { - return containingFileLabel.getRelative(targetNameForImport); + // This is for imports relative to the current repository, so repositoryMapping can be + // empty + return containingFileLabel.getRelativeWithRemapping(targetNameForImport, ImmutableMap.of()); } catch (LabelSyntaxException e) { // Shouldn't happen because the parent label is assumed to be valid and the target string is // validated on construction. @@ -198,7 +200,9 @@ public class SkylarkImports { // Unlike a relative path import, the import target is relative to the containing package, // not the containing directory within the package. try { - return containingFileLabel.getRelative(importTarget); + // This is for imports relative to the current repository, so repositoryMapping can be + // empty + return containingFileLabel.getRelativeWithRemapping(importTarget, ImmutableMap.of()); } catch (LabelSyntaxException e) { // shouldn't happen because the parent label is assumed validated and the target string is // validated on construction -- cgit v1.2.3