diff options
Diffstat (limited to 'src/main/java')
4 files changed, 22 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java index e946287dac..a8d72cc0ea 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java @@ -71,7 +71,6 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.common.options.OptionsBase; import com.google.devtools.common.options.OptionsProvider; - import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicBoolean; import javax.annotation.Nullable; @@ -190,8 +189,7 @@ public class BazelRepositoryModule extends BlazeModule { @Override public void beforeCommand(Command command, CommandEnvironment env) throws AbruptExitException { - delegator.setClientEnvironment(env.getClientEnv()); - skylarkRepositoryFunction.setCommandEnvironment(env); + delegator.setClientEnvironment(env.getActionClientEnv()); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java index 3fd7c2009e..b3fea3db34 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryFunction.java @@ -23,7 +23,6 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; -import com.google.devtools.build.lib.runtime.CommandEnvironment; import com.google.devtools.build.lib.skyframe.FileValue; import com.google.devtools.build.lib.syntax.BaseFunction; import com.google.devtools.build.lib.syntax.EvalException; @@ -34,10 +33,7 @@ import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.skyframe.SkyFunction.Environment; import com.google.devtools.build.skyframe.SkyFunctionException.Transience; import com.google.devtools.build.skyframe.SkyValue; - import java.io.IOException; -import java.util.Map; - import javax.annotation.Nullable; /** @@ -71,18 +67,6 @@ public class SkylarkRepositoryFunction extends RepositoryFunction { return new SkylarkRepositoryMissingDependencyException(); } - private CommandEnvironment commandEnvironment = null; - - public void setCommandEnvironment(CommandEnvironment commandEnvironment) { - this.commandEnvironment = commandEnvironment; - } - - private Map<String, String> getClientEnvironment() { - return commandEnvironment != null - ? commandEnvironment.getClientEnv() - : ImmutableMap.<String, String>of(); - } - @Nullable @Override public SkyValue fetch( @@ -95,8 +79,9 @@ public class SkylarkRepositoryFunction extends RepositoryFunction { .setGlobals(rule.getRuleClassObject().getRuleDefinitionEnvironment().getGlobals()) .setEventHandler(env.getListener()) .build(); - SkylarkRepositoryContext skylarkRepositoryContext = new SkylarkRepositoryContext( - rule, outputDirectory, env, getClientEnvironment(), httpDownloader); + SkylarkRepositoryContext skylarkRepositoryContext = + new SkylarkRepositoryContext( + rule, outputDirectory, env, clientEnvironment, httpDownloader); // This has side-effect, we don't care about the output. // Also we do a lot of stuff in there, maybe blocking operations and we should certainly make diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java index f9ac1c1afe..ba7ceda876 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java @@ -33,12 +33,10 @@ import com.google.devtools.build.skyframe.SkyFunctionException; import com.google.devtools.build.skyframe.SkyFunctionException.Transience; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; - import java.io.IOException; import java.util.Arrays; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; - import javax.annotation.Nullable; /** @@ -111,6 +109,8 @@ public final class RepositoryDelegatorFunction implements SkyFunction { "Could not find handler for " + rule), Transience.PERSISTENT); } + handler.setClientEnvironment(clientEnvironment); + Path repoRoot = RepositoryFunction.getExternalRepositoryDirectory(directories).getRelative(rule.getName()); byte[] ruleSpecificData = handler.getRuleSpecificMarkerData(rule, env); @@ -120,7 +120,6 @@ public final class RepositoryDelegatorFunction implements SkyFunction { byte[] ruleKey = computeRuleKey(rule, ruleSpecificData); Path markerPath = getMarkerPath(directories, rule); - handler.setClientEnvironment(clientEnvironment); if (handler.isLocal(rule)) { // Local repositories are always fetched because the operation is generally fast and they do // not depend on non-local data, so it does not make much sense to try to cache from across diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java index 264fa22195..cc473da5e6 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java @@ -29,6 +29,7 @@ import com.google.devtools.build.lib.analysis.SkyframePackageRootResolver; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection; import com.google.devtools.build.lib.analysis.config.BuildOptions; +import com.google.devtools.build.lib.analysis.config.DefaultsPackage; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Reporter; @@ -82,6 +83,7 @@ public final class CommandEnvironment { private final BlazeModule.ModuleEnvironment blazeModuleEnvironment; private final Map<String, String> clientEnv = new TreeMap<>(); private final Set<String> visibleClientEnv = new TreeSet<>(); + private final Map<String, String> actionClientEnv = new TreeMap<>(); private final TimestampGranularityMonitor timestampGranularityMonitor; private final Thread commandThread; @@ -592,6 +594,11 @@ public final class CommandEnvironment { // Start the performance and memory profilers. runtime.beforeCommand(this, options, execStartTimeNanos); + // actionClientEnv contains the environment where values from actionEnvironment are + // overridden. + actionClientEnv.clear(); + actionClientEnv.putAll(clientEnv); + if (command.builds()) { Map<String, String> testEnv = new TreeMap<>(); for (Map.Entry<String, String> entry : @@ -607,6 +614,7 @@ public final class CommandEnvironment { visibleClientEnv.add(entry.getKey()); } else { visibleClientEnv.remove(entry.getKey()); + actionClientEnv.put(entry.getKey(), entry.getValue()); } } @@ -644,4 +652,12 @@ public final class CommandEnvironment { } return workspace.getOutputBaseFilesystemTypeName(); } + + /** + * Returns the client environment for which value specified in the command line with the flag + * --action_env have been enforced. + */ + public Map<String, String> getActionClientEnv() { + return Collections.unmodifiableMap(actionClientEnv); + } } |