diff options
author | tomlu <tomlu@google.com> | 2017-07-14 19:08:17 +0200 |
---|---|---|
committer | Jakob Buchgraber <buchgr@google.com> | 2017-07-17 10:10:56 +0200 |
commit | 2bd6aa7ce56a8f8f110ed72a4c726fdce7d4da93 (patch) | |
tree | 144e692f0942394f73bfd16854dc81866f14ede1 /src/main/java/com/google | |
parent | c2665efd387e73b369d156bc0459311ca19fce2a (diff) |
Reserve certain action mnemonics so they can't be used from Skylark.
If a reserved mnemonic is used, it is mangled.
RELNOTES:
PiperOrigin-RevId: 161970885
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java | 16 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java | 16 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index ca8d5f93e0..ba82963582 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -232,6 +232,11 @@ public final class BuildConfiguration implements BuildEvent { public PatchTransition topLevelConfigurationHook(Target toTarget) { return null; } + + /** Returns a reserved set of action mnemonics. These cannot be used from a Skylark action. */ + public ImmutableSet<String> getReservedActionMnemonics() { + return ImmutableSet.of(); + } } private static final Label convertLabel(String input) throws OptionsParsingException { @@ -1185,6 +1190,7 @@ public final class BuildConfiguration implements BuildEvent { private final ImmutableMap<String, Class<? extends Fragment>> skylarkVisibleFragments; private final RepositoryName mainRepositoryName; private final DynamicTransitionMapper dynamicTransitionMapper; + private final ImmutableSet<String> reservedActionMnemonics; /** * Directories in the output tree. @@ -1579,6 +1585,12 @@ public final class BuildConfiguration implements BuildEvent { checksum = Fingerprint.md5Digest(buildOptions.computeCacheKey()); hashCode = computeHashCode(); + + ImmutableSet.Builder<String> reservedActionMnemonics = ImmutableSet.builder(); + for (Fragment fragment : fragments.values()) { + reservedActionMnemonics.addAll(fragment.getReservedActionMnemonics()); + } + this.reservedActionMnemonics = reservedActionMnemonics.build(); } /** @@ -2765,6 +2777,10 @@ public final class BuildConfiguration implements BuildEvent { return skylarkVisibleFragments.keySet(); } + public ImmutableSet<String> getReservedActionMnemonics() { + return reservedActionMnemonics; + } + /** * Returns an extra transition that should apply to top-level targets in this * configuration. Returns null if no transition is needed. diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java index cb78d39a50..7d43824237 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java @@ -590,8 +590,7 @@ public class SkylarkActionFactory implements SkylarkValue { } } - String mnemonic = - mnemonicUnchecked == Runtime.NONE ? "Generating" : (String) mnemonicUnchecked; + String mnemonic = getMnemonic(mnemonicUnchecked); builder.setMnemonic(mnemonic); if (envUnchecked != Runtime.NONE) { builder.setEnvironment( @@ -624,6 +623,19 @@ public class SkylarkActionFactory implements SkylarkValue { ruleContext.registerAction(builder.build(ruleContext)); } + private String getMnemonic(Object mnemonicUnchecked) { + String mnemonic = + mnemonicUnchecked == Runtime.NONE ? "SkylarkAction" : (String) mnemonicUnchecked; + if (ruleContext.getConfiguration().getReservedActionMnemonics().contains(mnemonic)) { + mnemonic = mangleMnemonic(mnemonic); + } + return mnemonic; + } + + private static String mangleMnemonic(String mnemonic) { + return mnemonic + "FromSkylark"; + } + @SkylarkCallable( name = "expand_template", doc = "Creates a template expansion action.", |