aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-07-14 19:08:17 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-07-17 10:10:56 +0200
commit2bd6aa7ce56a8f8f110ed72a4c726fdce7d4da93 (patch)
tree144e692f0942394f73bfd16854dc81866f14ede1 /src/main/java/com/google
parentc2665efd387e73b369d156bc0459311ca19fce2a (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.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java16
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.",