aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar carmi <carmi@google.com>2017-10-06 17:58:28 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-10-06 19:50:52 +0200
commit7ed032e7da2245062040e20879400955fe775616 (patch)
tree108a92703be6e094998d345c464d6a66d9059bd7
parente79a1107d90380501102990d82cbfaa8f51a1778 (diff)
PackageLoader.loadPackages() tolerates duplicates in the list of packages to load.
RELNOTES: None PiperOrigin-RevId: 171298089
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoaderTest.java13
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):",