diff options
author | 2017-10-06 17:58:28 +0200 | |
---|---|---|
committer | 2017-10-06 19:50:52 +0200 | |
commit | 7ed032e7da2245062040e20879400955fe775616 (patch) | |
tree | 108a92703be6e094998d345c464d6a66d9059bd7 | |
parent | e79a1107d90380501102990d82cbfaa8f51a1778 (diff) |
PackageLoader.loadPackages() tolerates duplicates in the list of packages to load.
RELNOTES: None
PiperOrigin-RevId: 171298089
2 files changed, 16 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java index e8a6086fef..9ea8e98492 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java @@ -252,11 +252,10 @@ public abstract class AbstractPackageLoader implements PackageLoader { @Override public ImmutableMap<PackageIdentifier, PackageLoader.PackageOrException> loadPackages( Iterable<? extends PackageIdentifier> pkgIds) throws InterruptedException { - ImmutableList.Builder<SkyKey> keysBuilder = ImmutableList.builder(); - for (PackageIdentifier pkgId : pkgIds) { - keysBuilder.add(PackageValue.key(pkgId)); + ArrayList<SkyKey> keys = new ArrayList<>(); + for (PackageIdentifier pkgId : ImmutableSet.copyOf(pkgIds)) { + keys.add(PackageValue.key(pkgId)); } - ImmutableList<SkyKey> keys = keysBuilder.build(); EvaluationResult<PackageValue> evalResult = makeFreshDriver().evaluate(keys, /*keepGoing=*/ true, skyframeThreads, reporter); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java index 2d3a2bf2a6..ac43486829 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java @@ -110,6 +110,19 @@ public abstract class AbstractPackageLoaderTest { } @Test + public void loadPackagesToleratesDuplicates() throws Exception { + file("good1/BUILD", "sh_library(name = 'good1')"); + PackageIdentifier pkgId = PackageIdentifier.createInMainRepo(PathFragment.create("good1")); + ImmutableMap<PackageIdentifier, PackageLoader.PackageOrException> pkgs = + pkgLoader.loadPackages(ImmutableList.of(pkgId, pkgId)); + assertThat(pkgs.get(pkgId).get().containsErrors()).isFalse(); + assertThat(pkgs.get(pkgId).get().getTarget("good1").getAssociatedRule().getRuleClass()) + .isEqualTo("sh_library"); + assertNoEvents(pkgs.get(pkgId).get().getEvents()); + assertNoEvents(handler.getEvents()); + } + + @Test public void simpleGoodPackage_Skylark() throws Exception { file("good/good.bzl", "def f(x):", |