aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java3
-rwxr-xr-xsrc/test/shell/integration/action_env_test.sh38
3 files changed, 46 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index 8ee985891e..b452b470ba 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -595,6 +595,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
buildSpawnAction(
owner,
configuration.getLocalShellEnvironment(),
+ configuration.getVariableShellEnvironment(),
configuration.getShellExecutable(),
paramsFile,
paramFileWriteAction));
@@ -627,6 +628,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
SpawnAction buildSpawnAction(
ActionOwner owner,
@Nullable Map<String, String> defaultShellEnvironment,
+ @Nullable Set<String> variableShellEnvironment,
@Nullable PathFragment defaultShellExecutable,
@Nullable Artifact paramsFile,
@Nullable ParameterFileWriteAction paramFileWriteAction) {
@@ -657,10 +659,13 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
inputAndToolManifests.putAll(toolManifests);
Map<String, String> env;
+ Set<String> clientEnv;
if (useDefaultShellEnvironment) {
env = Preconditions.checkNotNull(defaultShellEnvironment);
+ clientEnv = Preconditions.checkNotNull(variableShellEnvironment);
} else {
env = this.environment;
+ clientEnv = this.clientEnvironmentVariables;
}
if (disableSandboxing) {
@@ -678,7 +683,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
resourceSet,
actualCommandLine,
ImmutableMap.copyOf(env),
- clientEnvironmentVariables,
+ ImmutableSet.copyOf(clientEnv),
ImmutableMap.copyOf(executionInfo),
progressMessage,
ImmutableMap.copyOf(inputAndToolManifests),
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
index 65724891bc..4587e4a133 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnActionTemplate.java
@@ -165,6 +165,7 @@ public final class SpawnActionTemplate implements ActionAnalysisMetadata {
return actionBuilder.buildSpawnAction(
getOwner(),
/*defaultShellEnvironment=*/ null,
+ /*variableShellEnvironment=*/ null,
/*defaultShellExecutable=*/ null,
/*paramsFile=*/ null,
/*paramFileWriteAction=*/ null);
@@ -266,7 +267,7 @@ public final class SpawnActionTemplate implements ActionAnalysisMetadata {
@Override
public Iterable<String> getClientEnvironmentVariables() {
return spawnActionBuilder
- .buildSpawnAction(getOwner(), null, null, null, null)
+ .buildSpawnAction(getOwner(), null, null, null, null, null)
.getClientEnvironmentVariables();
}
diff --git a/src/test/shell/integration/action_env_test.sh b/src/test/shell/integration/action_env_test.sh
index 52d0e2b541..2564a5a4cb 100755
--- a/src/test/shell/integration/action_env_test.sh
+++ b/src/test/shell/integration/action_env_test.sh
@@ -34,6 +34,26 @@ genrule(
outs = ["env.txt"],
cmd = "env | sort > \"\$@\""
)
+
+load("//pkg:build.bzl", "environ")
+
+environ(name = "no_default_env", env = 0)
+environ(name = "with_default_env", env = 1)
+EOF
+ cat > pkg/build.bzl <<EOF
+def _impl(ctx):
+ output = ctx.outputs.out
+ ctx.action(
+ inputs=[],
+ outputs=[output],
+ use_default_shell_env = ctx.attr.env,
+ command="env > %s" % output.path)
+
+environ = rule(
+ implementation=_impl,
+ attrs={"env": attr.bool(default=True)},
+ outputs={"out": "%{name}.env"},
+)
EOF
}
@@ -146,4 +166,22 @@ function test_env_freezing() {
rm -f .${PRODUCT_NAME}rc
}
+function test_use_default_shell_env {
+ bazel build --action_env=FOO=bar //pkg/...
+ echo
+ cat bazel-bin/pkg/with_default_env.env
+ echo
+ grep -q FOO=bar bazel-bin/pkg/with_default_env.env \
+ || fail "static action environment not honored"
+ (grep -q FOO=bar bazel-bin/pkg/no_default_env.env \
+ && fail "static action_env used, even though requested not to") || true
+
+ export BAR=baz
+ bazel build --action_env=BAR //pkg/...
+ grep -q BAR=baz bazel-bin/pkg/with_default_env.env \
+ || fail "dynamic action environment not honored"
+ (grep -q BAR bazel-bin/pkg/no_default_env.env \
+ && fail "dynamic action_env used, even though requested not to") || true
+}
+
run_suite "Tests for bazel's handling of environment variables in actions"