aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2018-06-14 05:48:46 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-14 05:50:01 -0700
commit93fe20ce350e813caa53049a97f04014e0169df3 (patch)
tree5bc7f88fb1e86b1ba48f326a414fef796c1fba98 /src/main/java/com/google/devtools/build/lib
parent1615da781db78b7a910daf89720189c2b2e73dbe (diff)
Support unconditional fetching of repositories
Make all external repositories depend on an additional SkyValue controllable via commands, so support unconditional fetching of all external repositories, as it is needed by the the `sync` command. Improves on #5175, provides a work around for #4907. Change-Id: I30033614c1a2fad3f1363b85ff69cf92f697c255 PiperOrigin-RevId: 200543985
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java5
4 files changed, 33 insertions, 5 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 6d486b0f65..e336b3adc9 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
@@ -293,7 +293,12 @@ public class BazelRepositoryModule extends BlazeModule {
@Override
public ImmutableList<Injected> getPrecomputedValues() {
return ImmutableList.of(
- PrecomputedValue.injected(RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, overrides));
+ PrecomputedValue.injected(RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, overrides),
+ // That key will be reinjected by the sync command with a universally unique identifier.
+ // Nevertheless, we need to provide a default value for other commands.
+ PrecomputedValue.injected(
+ RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_FETCHING,
+ RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY));
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java b/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
index c5c30852fa..e9f2183df3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/SyncCommand.java
@@ -13,12 +13,14 @@
// limitations under the License.
package com.google.devtools.build.lib.bazel.commands;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.pkgcache.PackageCacheOptions;
+import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
import com.google.devtools.build.lib.runtime.BlazeCommand;
import com.google.devtools.build.lib.runtime.BlazeCommandResult;
@@ -26,6 +28,7 @@ import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
import com.google.devtools.build.lib.runtime.KeepGoingOption;
import com.google.devtools.build.lib.skyframe.PackageLookupValue;
+import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
import com.google.devtools.build.lib.skyframe.WorkspaceFileValue;
import com.google.devtools.build.lib.util.AbruptExitException;
@@ -55,6 +58,11 @@ public final class SyncCommand implements BlazeCommand {
try {
env.setupPackageCache(options, env.getRuntime().getDefaultsPackageContent());
SkyframeExecutor skyframeExecutor = env.getSkyframeExecutor();
+ skyframeExecutor.injectExtraPrecomputedValues(
+ ImmutableList.of(
+ PrecomputedValue.injected(
+ RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_FETCHING,
+ env.getCommandId().toString())));
// Obtain the key for the top-level WORKSPACE file
SkyKey packageLookupKey = PackageLookupValue.key(Label.EXTERNAL_PACKAGE_IDENTIFIER);
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 db74f31652..a590c0bfb6 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
@@ -56,6 +56,12 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
public static final Precomputed<Map<RepositoryName, PathFragment>> REPOSITORY_OVERRIDES =
new Precomputed<>(PrecomputedValue.Key.create("repository_overrides"));
+ public static final Precomputed<String> DEPENDENCY_FOR_UNCONDITIONAL_FETCHING =
+ new Precomputed<>(
+ PrecomputedValue.Key.create("dependency_for_unconditional_repository_fetching"));
+
+ public static final String DONT_FETCH_UNCONDITIONALLY = "";
+
// The marker file version is inject in the rule key digest so the rule key is always different
// when we decide to update the format.
private static final int MARKER_FILE_VERSION = 3;
@@ -107,6 +113,10 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
if (env.valuesMissing()) {
return null;
}
+ String fetchUnconditionally = DEPENDENCY_FOR_UNCONDITIONAL_FETCHING.get(env);
+ if (env.valuesMissing()) {
+ return null;
+ }
Path repoRoot = RepositoryFunction.getExternalRepositoryDirectory(directories)
.getRelative(repositoryName.strippedName());
@@ -170,9 +180,11 @@ public final class RepositoryDelegatorFunction implements SkyFunction {
if (env.valuesMissing()) {
return null;
}
- if (markerHash != null && repoRoot.exists()) {
- // Now that we know that it exists, we can declare a Skyframe dependency on the repository
- // root.
+ if (DONT_FETCH_UNCONDITIONALLY.equals(fetchUnconditionally)
+ && markerHash != null
+ && repoRoot.exists()) {
+ // Now that we know that it exists and that we should not fetch unconditionally, we can
+ // declare a Skyframe dependency on the repository root.
RepositoryFunction.getRepositoryDirectory(repoRoot, env);
if (env.valuesMissing()) {
return null;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java
index ac55f39897..a92d08032b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java
@@ -101,7 +101,10 @@ public class BazelPackageLoader extends AbstractPackageLoader {
PrecomputedValue.injected(PrecomputedValue.ACTION_ENV, ImmutableMap.of()),
PrecomputedValue.injected(
RepositoryDelegatorFunction.REPOSITORY_OVERRIDES,
- Suppliers.ofInstance(ImmutableMap.of())));
+ Suppliers.ofInstance(ImmutableMap.of())),
+ PrecomputedValue.injected(
+ RepositoryDelegatorFunction.DEPENDENCY_FOR_UNCONDITIONAL_FETCHING,
+ RepositoryDelegatorFunction.DONT_FETCH_UNCONDITIONALLY));
return builder;
}