aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java11
2 files changed, 19 insertions, 0 deletions
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 6e39a17a73..d6f143f873 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
@@ -36,6 +36,7 @@ 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;
@@ -61,6 +62,8 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
// command is a fetch. Remote repository lookups are only allowed during fetches.
private final AtomicBoolean isFetch;
+ private Map<String, String> clientEnvironment;
+
public RepositoryDelegatorFunction(
ImmutableMap<String, RepositoryFunction> handlers,
@Nullable RepositoryFunction skylarkHandler,
@@ -70,6 +73,10 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
this.isFetch = isFetch;
}
+ public void setClientEnvironment(Map<String, String> clientEnvironment) {
+ this.clientEnvironment = clientEnvironment;
+ }
+
private void setupRepositoryRoot(Path repoRoot) throws RepositoryFunctionException {
try {
FileSystemUtils.deleteTree(repoRoot);
@@ -107,6 +114,7 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
Path repoRoot =
RepositoryFunction.getExternalRepositoryDirectory(directories).getRelative(rule.getName());
+ 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 catch from across
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
index d3f5982fb1..043bd0f0df 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
@@ -50,6 +50,7 @@ import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
import java.nio.charset.Charset;
+import java.util.Map;
import javax.annotation.Nullable;
@@ -83,6 +84,8 @@ import javax.annotation.Nullable;
*/
public abstract class RepositoryFunction {
+ protected Map<String, String> clientEnvironment;
+
/**
* Exception thrown when something goes wrong accessing a remote repository.
*
@@ -107,6 +110,7 @@ public abstract class RepositoryFunction {
public RepositoryFunctionException(EvalException cause, Transience transience) {
super(cause, transience);
}
+
}
/**
@@ -417,6 +421,13 @@ public abstract class RepositoryFunction {
}
/**
+ * Sets up a mapping of environment variables to use.
+ */
+ public void setClientEnvironment(Map<String, String> clientEnvironment) {
+ this.clientEnvironment = clientEnvironment;
+ }
+
+ /**
* Returns the RuleDefinition class for this type of repository.
*/
public abstract Class<? extends RuleDefinition> getRuleDefinition();