diff options
Diffstat (limited to 'src')
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" |