Inject the changes in the client environment for the ClientEnvironmentFunction
Using a precomputed values prevent us from being able to depends on any
environment variable (or we would invalidate the whole graph each time
the environment change, that is each time we run a command).
--
Change-Id: If322df4240271d04b9278e1222f936156531580c
Reviewed-on: https://cr.bazel.build/8400
PiperOrigin-RevId: 146298592
MOS_MIGRATED_REVID=146298592
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
index cc2c37a..20de7df 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
@@ -18,11 +18,18 @@
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
/** The Skyframe function that generates values for variables of the client environment. */
public final class ClientEnvironmentFunction implements SkyFunction {
+ private final AtomicReference<Map<String, String>> clientEnv;
+
+ ClientEnvironmentFunction(AtomicReference<Map<String, String>> clientEnv) {
+ this.clientEnv = clientEnv;
+ }
+
@Nullable
@Override
public String extractTag(SkyKey skyKey) {
@@ -31,8 +38,7 @@
@Nullable
@Override
- public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException {
- Map<String, String> clientEnv = PrecomputedValue.CLIENT_ENV.get(env);
- return new ClientEnvironmentValue(clientEnv.get((String) skyKey.argument()));
+ public SkyValue compute(SkyKey key, Environment env) throws InterruptedException {
+ return new ClientEnvironmentValue(clientEnv.get().get((String) key.argument()));
}
}