diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ProgressEventSuppressingEnvironment.java b/src/main/java/com/google/devtools/build/lib/skyframe/ProgressEventSuppressingEnvironment.java index c1d08fba536d52..b8cc148b6b3120 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ProgressEventSuppressingEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ProgressEventSuppressingEnvironment.java @@ -146,4 +146,10 @@ public boolean restartPermitted() { public T getState(Supplier stateSupplier) { return delegate.getState(stateSupplier); } + + @Override + @Nullable + public Version getMaxTransitiveSourceVersionSoFar() { + return delegate.getMaxTransitiveSourceVersionSoFar(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java index 98b48a473e3968..d3f523b75cf37c 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctionEnvironmentForTesting.java @@ -28,9 +28,11 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.ValueOrUntypedException; +import com.google.devtools.build.skyframe.Version; import java.util.List; import java.util.Map; import java.util.function.Supplier; +import javax.annotation.Nullable; /** * A {@link SkyFunction.Environment} backed by a {@link SkyframeExecutor} that can be used to @@ -101,4 +103,10 @@ public boolean restartPermitted() { public T getState(Supplier stateSupplier) { return stateSupplier.get(); } + + @Override + @Nullable + public Version getMaxTransitiveSourceVersionSoFar() { + throw new UnsupportedOperationException(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StateInformingSkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/lib/skyframe/StateInformingSkyFunctionEnvironment.java index 27cf411737d72b..b0b989d1b7e406 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/StateInformingSkyFunctionEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/StateInformingSkyFunctionEnvironment.java @@ -181,4 +181,10 @@ public T getState(Supplier stateSupplier) { interface Informee { void inform() throws InterruptedException; } + + @Override + @Nullable + public Version getMaxTransitiveSourceVersionSoFar() { + return delegate.getMaxTransitiveSourceVersionSoFar(); + } } diff --git a/src/main/java/com/google/devtools/build/skyframe/RecordingSkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/RecordingSkyFunctionEnvironment.java index 8d8eccfeea5925..c24f1328ece210 100644 --- a/src/main/java/com/google/devtools/build/skyframe/RecordingSkyFunctionEnvironment.java +++ b/src/main/java/com/google/devtools/build/skyframe/RecordingSkyFunctionEnvironment.java @@ -200,4 +200,10 @@ public boolean restartPermitted() { public T getState(Supplier stateSupplier) { return delegate.getState(stateSupplier); } + + @Override + @Nullable + public Version getMaxTransitiveSourceVersionSoFar() { + return delegate.getMaxTransitiveSourceVersionSoFar(); + } } diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java index 2245d6cacc688d..f941c6e81272ca 100644 --- a/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java +++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunction.java @@ -409,5 +409,14 @@ interface SkyKeyComputeState {} * {@link #compute} call. */ T getState(Supplier stateSupplier); + + /** + * Returns the max transitive source version of a {@link NodeEntry}. + * + *

This value might not consider all deps' source versions if called before all deps have + * been requested or if {@link #valuesMissing()} returns true. + */ + @Nullable + Version getMaxTransitiveSourceVersionSoFar(); } } diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java index 610945dcf33439..5c463a0ef3cb0a 100644 --- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java +++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java @@ -994,4 +994,10 @@ ImmutableList getDepKeys() { return depKeys; } } + + @Override + @Nullable + public Version getMaxTransitiveSourceVersionSoFar() { + return maxTransitiveSourceVersion; + } } diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java index 5d48dfe0b1776e..d93437767821fc 100644 --- a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java +++ b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java @@ -104,6 +104,7 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.ValueOrUntypedException; +import com.google.devtools.build.skyframe.Version; import com.google.protobuf.ByteString; import java.io.IOException; import java.io.OutputStream; @@ -399,6 +400,12 @@ public boolean restartPermitted() { public T getState(Supplier stateSupplier) { return stateSupplier.get(); } + + @Override + @Nullable + public Version getMaxTransitiveSourceVersionSoFar() { + throw new UnsupportedOperationException(); + } } @SerializationConstant