Add `OptionsProvider` to `DiffAwareness.Factory#maybeCreate()` to allow options to configure creating `DiffAwareness` instances. RELNOTES: None. PiperOrigin-RevId: 648844781 Change-Id: Ib1cbd42dc1af56e15f33f84e522ebc6f8f76309e
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java index 95e2f8c..b20a800 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java
@@ -43,7 +43,8 @@ * per package path entry using one of the factories that returns a non-null value. */ @Nullable - DiffAwareness maybeCreate(Root pathEntry, ImmutableSet<Path> ignoredPaths); + DiffAwareness maybeCreate( + Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider optionsProvider); } /** Opaque view of the filesystem under a package path entry at a specific point in time. */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java index 3f09081..9ba426d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java
@@ -107,7 +107,8 @@ ImmutableSet<Path> ignoredPaths, OptionsProvider options) throws InterruptedException { - DiffAwarenessState diffAwarenessState = maybeGetDiffAwarenessState(pathEntry, ignoredPaths); + DiffAwarenessState diffAwarenessState = + maybeGetDiffAwarenessState(pathEntry, ignoredPaths, options); if (diffAwarenessState == null) { return BrokenProcessableModifiedFileSet.INSTANCE; } @@ -160,7 +161,7 @@ */ @Nullable private DiffAwarenessState maybeGetDiffAwarenessState( - Root pathEntry, ImmutableSet<Path> ignoredPaths) { + Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider options) { StateKey stateKey = StateKey.create(pathEntry, ignoredPaths); DiffAwarenessState diffAwarenessState = currentDiffAwarenessStates.get(stateKey); if (diffAwarenessState != null) { @@ -168,7 +169,7 @@ } for (DiffAwareness.Factory factory : diffAwarenessFactories) { - DiffAwareness newDiffAwareness = factory.maybeCreate(pathEntry, ignoredPaths); + DiffAwareness newDiffAwareness = factory.maybeCreate(pathEntry, ignoredPaths, options); if (newDiffAwareness != null) { logger.atInfo().log( "Using %s DiffAwareness strategy for %s", newDiffAwareness.name(), pathEntry);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java index 9a9502a..630329f 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java
@@ -27,6 +27,7 @@ import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.OptionsBase; +import com.google.devtools.common.options.OptionsProvider; import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Path; @@ -88,7 +89,9 @@ @Override @Nullable public DiffAwareness maybeCreate( - Root pathEntry, ImmutableSet<com.google.devtools.build.lib.vfs.Path> ignoredPaths) { + Root pathEntry, + ImmutableSet<com.google.devtools.build.lib.vfs.Path> ignoredPaths, + OptionsProvider optionsProvider) { com.google.devtools.build.lib.vfs.Path resolvedPathEntry; try { resolvedPathEntry = pathEntry.asPath().resolveSymbolicLinks();
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java index 6bc1f54..fc7d118 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -422,7 +422,8 @@ private class ManualDiffAwarenessFactory implements DiffAwareness.Factory { @Nullable @Override - public DiffAwareness maybeCreate(Root pathEntry, ImmutableSet<Path> ignoredPaths) { + public DiffAwareness maybeCreate( + Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider optionsProvider) { return pathEntry.asPath().equals(workspace) ? new ManualDiffAwareness() : null; } }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java index b0ab299..095d9ec 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java
@@ -217,12 +217,14 @@ ModifiedFileSet diff1 = modifiedFileSet("/path/ignored-path-2/foo"); DiffAwareness diffAwareness1 = new DiffAwarenessStub(ImmutableList.of(diff1)); - when(factory.maybeCreate(pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-1")))) + when(factory.maybeCreate( + pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-1")), OptionsProvider.EMPTY)) .thenReturn(diffAwareness1); ModifiedFileSet diff2 = modifiedFileSet("/path/ignored-path-1/foo"); DiffAwareness diffAwareness2 = new DiffAwarenessStub(ImmutableList.of(diff2)); - when(factory.maybeCreate(pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-2")))) + when(factory.maybeCreate( + pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-2")), OptionsProvider.EMPTY)) .thenReturn(diffAwareness2); DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory)); @@ -265,7 +267,8 @@ DiffAwareness diffAwareness = mock(DiffAwareness.class); when(diffAwareness.getCurrentView(any())).thenReturn(createView(workspaceInfo)); DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class); - when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness); + when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY)) + .thenReturn(diffAwareness); DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory)); ProcessableModifiedFileSet diff = @@ -286,7 +289,8 @@ when(diffAwareness.getDiff(view1, view2)) .thenReturn(ModifiedFileSet.builder().modify(PathFragment.create("file")).build()); DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class); - when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness); + when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY)) + .thenReturn(diffAwareness); DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory)); var unused = manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY); @@ -308,7 +312,8 @@ when(diffAwareness.getCurrentView(any())).thenReturn(view1, view2); when(diffAwareness.getDiff(view1, view2)).thenReturn(ModifiedFileSet.NOTHING_MODIFIED); DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class); - when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness); + when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY)) + .thenReturn(diffAwareness); DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory)); var unused = manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY); @@ -330,7 +335,8 @@ when(diffAwareness.getDiff(view1, view2)) .thenReturn(ModifiedFileSet.builder().modify(PathFragment.create("file")).build()); DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class); - when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness); + when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY)) + .thenReturn(diffAwareness); DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory)); var unused = manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY); @@ -352,7 +358,8 @@ when(diffAwareness.getCurrentView(any())).thenReturn(view1, view2); when(diffAwareness.getDiff(view1, view2)).thenThrow(BrokenDiffAwarenessException.class); DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class); - when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness); + when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY)) + .thenReturn(diffAwareness); DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory)); var unused = manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY); @@ -372,7 +379,8 @@ when(diffAwareness.getCurrentView(any())).thenReturn(view1, view2); when(diffAwareness.getDiff(view1, view2)).thenThrow(IncompatibleViewException.class); DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class); - when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness); + when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY)) + .thenReturn(diffAwareness); DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory)); var unused = manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY); @@ -408,7 +416,8 @@ @Override @Nullable - public DiffAwareness maybeCreate(Root pathEntry, ImmutableSet<Path> ignoredPaths) { + public DiffAwareness maybeCreate( + Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider optionsProvider) { return diffAwarenesses.get(pathEntry); } }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java index 551f8d6..729fa57 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java
@@ -69,14 +69,18 @@ testCaseRoot.createDirectoryAndParents(); testCaseIgnoredDir = testCaseRoot.getChild("ignored-dir"); testCaseIgnoredDir.createDirectoryAndParents(); - localDiff = - (LocalDiffAwareness) - factory.maybeCreate(Root.fromPath(testCaseRoot), ImmutableSet.of(testCaseIgnoredDir)); LocalDiffAwareness.Options localDiffOptions = new LocalDiffAwareness.Options(); localDiffOptions.watchFS = true; watchFsEnabledProvider = FakeOptions.of(localDiffOptions); + localDiff = + (LocalDiffAwareness) + factory.maybeCreate( + Root.fromPath(testCaseRoot), + ImmutableSet.of(testCaseIgnoredDir), + watchFsEnabledProvider); + // Ignore test failures when run on a Mac. // // On a Mac, LocalDiffAwareness.Factory#maybeCreate will produce a MacOSXFsEventsDiffAwareness.
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java index 4ae993e0..0ce35b4 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
@@ -455,7 +455,7 @@ } private static DiffAwareness.Factory nothingChangedDiffAwarenessFactory() { - return (pathEntry, ignoredPaths) -> + return (pathEntry, ignoredPaths, optionsProvider) -> new DiffAwareness() { @Override public View getCurrentView(OptionsProvider options) {