From f9fdc8dfced8b2b14561720623126a91e04b22cb Mon Sep 17 00:00:00 2001 From: Kristina Chodorow Date: Tue, 8 Dec 2015 12:49:31 +0000 Subject: Don't treat external files as immutable Fixes #352. RELNOTES: Files in external repositories are now treated as mutable, which will make the correctness guarantees of using external repositories stronger (existent), but may cause performance penalties. -- MOS_MIGRATED_REVID=109676408 --- .../build/lib/skyframe/ArtifactFunctionTest.java | 31 +++++++++++---- .../ContainingPackageLookupFunctionTest.java | 4 +- .../build/lib/skyframe/FileFunctionTest.java | 46 +++++++++++++--------- .../lib/skyframe/FilesetEntryFunctionTest.java | 4 +- .../lib/skyframe/FilesystemValueCheckerTest.java | 26 +++++++++--- .../build/lib/skyframe/GlobFunctionTest.java | 4 +- .../lib/skyframe/PackageLookupFunctionTest.java | 4 +- .../RecursiveFilesystemTraversalFunctionTest.java | 15 ++++++- .../lib/skyframe/TimestampBuilderTestCase.java | 33 ++++++++++------ 9 files changed, 114 insertions(+), 53 deletions(-) (limited to 'src/test/java/com/google/devtools/build/lib/skyframe') diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java index e05464299f..f7cb45029c 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java @@ -33,9 +33,12 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MissingInputFileException; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.actions.util.TestAction.DummyAction; +import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.events.NullEventHandler; +import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.skyframe.ActionLookupValue.ActionLookupKey; +import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.testutil.TestUtils; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.Pair; @@ -91,24 +94,36 @@ public class ArtifactFunctionTest { public final void setUp() throws Exception { setupRoot(new CustomInMemoryFs()); AtomicReference pkgLocator = - new AtomicReference<>(PathPackageLocator.EMPTY); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + new AtomicReference<>(new PathPackageLocator(root)); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); differencer = new RecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator( - ImmutableMap.of( - SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper), - SkyFunctions.FILE, new FileFunction(pkgLocator, tsgm, externalFilesHelper), - SkyFunctions.ARTIFACT, new ArtifactFunction(Predicates.alwaysFalse()), - SkyFunctions.ACTION_EXECUTION, new SimpleActionExecutionFunction()), + ImmutableMap.builder() + .put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)) + .put(SkyFunctions.FILE, new FileFunction(pkgLocator)) + .put(SkyFunctions.ARTIFACT, + new ArtifactFunction(Predicates.alwaysFalse())) + .put(SkyFunctions.ACTION_EXECUTION, new SimpleActionExecutionFunction()) + .put(SkyFunctions.PACKAGE, + new PackageFunction(null, null, null, null, null, null, null)) + .put(SkyFunctions.PACKAGE_LOOKUP, new PackageLookupFunction(null)) + .put(SkyFunctions.WORKSPACE_FILE, + new WorkspaceFileFunction(TestRuleClassProvider.getRuleClassProvider(), + new PackageFactory(TestRuleClassProvider.getRuleClassProvider()), + new BlazeDirectories(root, root, root))) + .build(), differencer); driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); + PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); actions = new HashSet<>(); } - private void setupRoot(CustomInMemoryFs fs) { + private void setupRoot(CustomInMemoryFs fs) throws IOException { root = fs.getPath(TestUtils.tmpDir()); + FileSystemUtils.createDirectoryAndParents(root); + FileSystemUtils.createEmptyFile(root.getRelative("WORKSPACE")); } private void assertFileArtifactValueMatches(boolean expectDigest) throws Throwable { diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java index 83c8775ca1..3d7f77e740 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java @@ -60,7 +60,7 @@ public class ContainingPackageLookupFunctionTest extends FoundationTestCase { AtomicReference pkgLocator = new AtomicReference<>(new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory))); deletedPackages = new AtomicReference<>(ImmutableSet.of()); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance()); Map skyFunctions = new HashMap<>(); @@ -69,7 +69,7 @@ public class ContainingPackageLookupFunctionTest extends FoundationTestCase { skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, new BlacklistedPackagePrefixesFunction()); skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)); - skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator, tsgm, externalFilesHelper)); + skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); RecordingDifferencer differencer = new RecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); driver = new SequentialBuildDriver(evaluator); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java index ae5de2782b..96dc02af25 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java @@ -19,7 +19,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -34,10 +33,14 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.testing.EqualsTester; +import com.google.devtools.build.lib.analysis.BlazeDirectories; +import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; +import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.testutil.ManualClock; +import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.testutil.TestUtils; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.Pair; @@ -56,6 +59,7 @@ import com.google.devtools.build.skyframe.InMemoryMemoizingEvaluator; import com.google.devtools.build.skyframe.MemoizingEvaluator; import com.google.devtools.build.skyframe.RecordingDifferencer; import com.google.devtools.build.skyframe.SequentialBuildDriver; +import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -121,15 +125,26 @@ public class FileFunctionTest { differencer = new RecordingDifferencer(); MemoizingEvaluator evaluator = new InMemoryMemoizingEvaluator( - ImmutableMap.of( - SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper), - SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS, - new FileSymlinkCycleUniquenessFunction(), - SkyFunctions.FILE_SYMLINK_INFINITE_EXPANSION_UNIQUENESS, - new FileSymlinkInfiniteExpansionUniquenessFunction(), - SkyFunctions.FILE, new FileFunction(pkgLocatorRef, tsgm, externalFilesHelper)), + ImmutableMap.builder() + .put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)) + .put(SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS, + new FileSymlinkCycleUniquenessFunction()) + .put(SkyFunctions.FILE_SYMLINK_INFINITE_EXPANSION_UNIQUENESS, + new FileSymlinkInfiniteExpansionUniquenessFunction()) + .put(SkyFunctions.FILE, new FileFunction(pkgLocatorRef)) + .put(SkyFunctions.PACKAGE, + new PackageFunction(null, null, null, null, null, null, null)) + .put(SkyFunctions.PACKAGE_LOOKUP, + new PackageLookupFunction(new AtomicReference<>( + ImmutableSet.of()))) + .put(SkyFunctions.WORKSPACE_FILE, + new WorkspaceFileFunction(TestRuleClassProvider.getRuleClassProvider(), + new PackageFactory(TestRuleClassProvider.getRuleClassProvider()), + new BlazeDirectories(pkgRoot, outputBase, pkgRoot))) + .build(), differencer); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); + PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator); return new SequentialBuildDriver(evaluator); } @@ -265,6 +280,7 @@ public class FileFunctionTest { getFilesSeenAndAssertValueChangesIfContentsOfFileChanges("../outside", true, "a")); assertThat(seenFiles) .containsExactly( + rootedPath("WORKSPACE"), rootedPath("a"), rootedPath(""), RootedPath.toRootedPath(fs.getRootDirectory(), PathFragment.EMPTY_FRAGMENT), @@ -282,6 +298,7 @@ public class FileFunctionTest { getFilesSeenAndAssertValueChangesIfContentsOfFileChanges("/absolute", true, "a")); assertThat(seenFiles) .containsExactly( + rootedPath("WORKSPACE"), rootedPath("a"), rootedPath(""), RootedPath.toRootedPath(fs.getRootDirectory(), PathFragment.EMPTY_FRAGMENT), @@ -537,7 +554,7 @@ public class FileFunctionTest { } @Test - public void testFilesOutsideRootHasDepOnBuildID() throws Exception { + public void testFilesOutsideRootIsReEvaluated() throws Exception { Path file = file("/outsideroot"); SequentialBuildDriver driver = makeDriver(); SkyKey key = skyKey("/outsideroot"); @@ -552,6 +569,7 @@ public class FileFunctionTest { assertTrue(oldValue.exists()); file.delete(); + differencer.invalidate(ImmutableList.of(fileStateSkyKey("/outsideroot"))); result = driver.evaluate( ImmutableList.of(key), false, DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE); @@ -559,16 +577,6 @@ public class FileFunctionTest { fail(String.format("Evaluation error for %s: %s", key, result.getError())); } FileValue newValue = (FileValue) result.get(key); - assertSame(oldValue, newValue); - - PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); - result = - driver.evaluate( - ImmutableList.of(key), false, DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE); - if (result.hasError()) { - fail(String.format("Evaluation error for %s: %s", key, result.getError())); - } - newValue = (FileValue) result.get(key); assertNotSame(oldValue, newValue); assertFalse(newValue.exists()); } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java index 17eb2a11bd..302bb2b345 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java @@ -85,12 +85,12 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase { new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory))); AtomicReference> deletedPackages = new AtomicReference<>(ImmutableSet.of()); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); Map skyFunctions = new HashMap<>(); skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)); - skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator, tsgm, externalFilesHelper)); + skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); skyFunctions.put(SkyFunctions.DIRECTORY_LISTING, new DirectoryListingFunction()); skyFunctions.put( SkyFunctions.DIRECTORY_LISTING_STATE, diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java index 69a267b582..933d5adcfe 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java @@ -28,9 +28,13 @@ import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.actions.util.TestAction; +import com.google.devtools.build.lib.analysis.BlazeDirectories; +import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; +import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.BasicFilesystemDirtinessChecker; +import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.BatchStat; @@ -91,22 +95,34 @@ public class FilesystemValueCheckerTest { fs = new MockFileSystem(); pkgRoot = fs.getPath("/testroot"); + FileSystemUtils.createDirectoryAndParents(pkgRoot); + FileSystemUtils.createEmptyFile(pkgRoot.getRelative("WORKSPACE")); tsgm = new TimestampGranularityMonitor(BlazeClock.instance()); AtomicReference pkgLocator = - new AtomicReference<>(PathPackageLocator.EMPTY); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + new AtomicReference<>(new PathPackageLocator(pkgRoot)); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)); - skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator, tsgm, externalFilesHelper)); + skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); skyFunctions.put( SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS, new FileSymlinkCycleUniquenessFunction()); skyFunctions.put( SkyFunctions.FILE_SYMLINK_INFINITE_EXPANSION_UNIQUENESS, new FileSymlinkInfiniteExpansionUniquenessFunction()); + skyFunctions.put(SkyFunctions.PACKAGE, + new PackageFunction(null, null, null, null, null, null, null)); + skyFunctions.put(SkyFunctions.PACKAGE_LOOKUP, + new PackageLookupFunction(new AtomicReference<>(ImmutableSet.of()))); + skyFunctions.put(SkyFunctions.WORKSPACE_FILE, + new WorkspaceFileFunction(TestRuleClassProvider.getRuleClassProvider(), + new PackageFactory(TestRuleClassProvider.getRuleClassProvider()), + new BlazeDirectories(pkgRoot, pkgRoot, pkgRoot))); + differencer = new RecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions.build(), differencer); driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); + PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); } @Test @@ -123,8 +139,8 @@ public class FilesystemValueCheckerTest { FileSystemUtils.createEmptyFile(path); assertEmptyDiff(getDirtyFilesystemKeys(evaluator, checker)); - SkyKey skyKey = - FileStateValue.key(RootedPath.toRootedPath(fs.getRootDirectory(), new PathFragment("foo"))); + SkyKey skyKey = FileStateValue.key( + RootedPath.toRootedPath(fs.getRootDirectory(), new PathFragment("foo"))); EvaluationResult result = driver.evaluate( ImmutableList.of(skyKey), diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java index a5c9614c04..cb558228bc 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java @@ -125,7 +125,7 @@ public abstract class GlobFunctionTest { private Map createFunctionMap() { AtomicReference> deletedPackages = new AtomicReference<>(ImmutableSet.of()); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); Map skyFunctions = new HashMap<>(); skyFunctions.put(SkyFunctions.GLOB, new GlobFunction(alwaysUseDirListing())); @@ -140,7 +140,7 @@ public abstract class GlobFunctionTest { SkyFunctions.FILE_STATE, new FileStateFunction( new TimestampGranularityMonitor(BlazeClock.instance()), externalFilesHelper)); - skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator, tsgm, externalFilesHelper)); + skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); return skyFunctions; } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java index 6b540e5dcb..a27cb61bb3 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java @@ -73,7 +73,7 @@ public class PackageLookupFunctionTest extends FoundationTestCase { AtomicReference pkgLocator = new AtomicReference<>( new PathPackageLocator(outputBase, ImmutableList.of(emptyPackagePath, rootDirectory))); deletedPackages = new AtomicReference<>(ImmutableSet.of()); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance()); BlazeDirectories directories = new BlazeDirectories(rootDirectory, outputBase, rootDirectory); @@ -84,7 +84,7 @@ public class PackageLookupFunctionTest extends FoundationTestCase { SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null)); skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)); - skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator, tsgm, externalFilesHelper)); + skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, new BlacklistedPackagePrefixesFunction()); RuleClassProvider ruleClassProvider = TestRuleClassProvider.getRuleClassProvider(); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java index 5b4f17d58a..6efb91e1da 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java @@ -30,12 +30,15 @@ import com.google.common.collect.Sets; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.FilesetTraversalParams.PackageBoundaryMode; import com.google.devtools.build.lib.actions.Root; +import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.NullEventHandler; +import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.ResolvedFile; import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.TraversalRequest; import com.google.devtools.build.lib.testutil.FoundationTestCase; +import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.util.BlazeClock; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.Path; @@ -86,12 +89,12 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory))); AtomicReference> deletedPackages = new AtomicReference<>(ImmutableSet.of()); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); Map skyFunctions = new HashMap<>(); skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)); - skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator, tsgm, externalFilesHelper)); + skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); skyFunctions.put(SkyFunctions.DIRECTORY_LISTING, new DirectoryListingFunction()); skyFunctions.put( SkyFunctions.DIRECTORY_LISTING_STATE, @@ -101,6 +104,14 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe skyFunctions.put(SkyFunctions.PACKAGE_LOOKUP, new PackageLookupFunction(deletedPackages)); skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, new BlacklistedPackagePrefixesFunction()); + skyFunctions.put(SkyFunctions.PACKAGE, + new PackageFunction(null, null, null, null, null, null, null)); + skyFunctions.put(SkyFunctions.PACKAGE_LOOKUP, + new PackageLookupFunction(deletedPackages)); + skyFunctions.put(SkyFunctions.WORKSPACE_FILE, + new WorkspaceFileFunction(TestRuleClassProvider.getRuleClassProvider(), + new PackageFactory(TestRuleClassProvider.getRuleClassProvider()), + new BlazeDirectories(rootDirectory, outputBase, rootDirectory))); progressReceiver = new RecordingEvaluationProgressReceiver(); differencer = new RecordingDifferencer(); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java index a9697d8e9b..18227f815d 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java @@ -38,12 +38,15 @@ import com.google.devtools.build.lib.actions.TestExecException; import com.google.devtools.build.lib.actions.cache.ActionCache; import com.google.devtools.build.lib.actions.util.DummyExecutor; import com.google.devtools.build.lib.actions.util.TestAction; +import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.buildtool.SkyframeBuilder; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.events.StoredEventHandler; +import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.testutil.FoundationTestCase; +import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.testutil.TestUtils; import com.google.devtools.build.lib.util.AbruptExitException; import com.google.devtools.build.lib.util.BlazeClock; @@ -59,6 +62,7 @@ import com.google.devtools.build.skyframe.EvaluationResult; import com.google.devtools.build.skyframe.InMemoryMemoizingEvaluator; import com.google.devtools.build.skyframe.RecordingDifferencer; import com.google.devtools.build.skyframe.SequentialBuildDriver; +import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -133,8 +137,8 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase { final boolean keepGoing, @Nullable EvaluationProgressReceiver evaluationProgressReceiver) { AtomicReference pkgLocator = - new AtomicReference<>(new PathPackageLocator(outputBase, ImmutableList.of())); - ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator); + new AtomicReference<>(new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory))); + ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false); differencer = new RecordingDifferencer(); ActionExecutionStatusReporter statusReporter = @@ -148,19 +152,26 @@ public abstract class TimestampBuilderTestCase extends FoundationTestCase { final InMemoryMemoizingEvaluator evaluator = new InMemoryMemoizingEvaluator( - ImmutableMap.of( - SkyFunctions.FILE_STATE, - new FileStateFunction(tsgm, externalFilesHelper), - SkyFunctions.FILE, - new FileFunction(pkgLocator, tsgm, externalFilesHelper), - SkyFunctions.ARTIFACT, - new ArtifactFunction(Predicates.alwaysFalse()), - SkyFunctions.ACTION_EXECUTION, - new ActionExecutionFunction(skyframeActionExecutor, tsgm)), + ImmutableMap.builder() + .put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper)) + .put(SkyFunctions.FILE, new FileFunction(pkgLocator)) + .put(SkyFunctions.ARTIFACT, + new ArtifactFunction(Predicates.alwaysFalse())) + .put(SkyFunctions.ACTION_EXECUTION, + new ActionExecutionFunction(skyframeActionExecutor, tsgm)) + .put(SkyFunctions.PACKAGE, + new PackageFunction(null, null, null, null, null, null, null)) + .put(SkyFunctions.PACKAGE_LOOKUP, new PackageLookupFunction(null)) + .put(SkyFunctions.WORKSPACE_FILE, + new WorkspaceFileFunction(TestRuleClassProvider.getRuleClassProvider(), + new PackageFactory(TestRuleClassProvider.getRuleClassProvider()), + new BlazeDirectories(rootDirectory, outputBase, rootDirectory))) + .build(), differencer, evaluationProgressReceiver); final SequentialBuildDriver driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); + PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); return new Builder() { private void setGeneratingActions() { -- cgit v1.2.3