Browse Source

Use exclusiveContent gradle feature for jdk and distro downloads (#53358)

The jdk and distribution download plugins create fake ivy repositories,
and use group based repository filtering to ensure no other artifacts
try to resolve against the fake repos. Currently this works by adding a
blanket exclude to all repositories for the given group name. This
commit changes to using the new exclusiveContent feature in
Gradle to do the exclusion.
Ryan Ernst 5 years ago
parent
commit
bd60598f36

+ 10 - 13
buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java

@@ -174,24 +174,21 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
     }
 
     private static void addIvyRepo(Project project, String name, String url, String group) {
-        project.getRepositories().ivy(ivyRepo -> {
-            ivyRepo.setName(name);
-            ivyRepo.setUrl(url);
-            ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
+        IvyArtifactRepository ivyRepo = project.getRepositories().ivy(repo -> {
+            repo.setName(name);
+            repo.setUrl(url);
+            repo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
             // this header is not a credential but we hack the capability to send this header to avoid polluting our download stats
-            ivyRepo.credentials(HttpHeaderCredentials.class, creds -> {
+            repo.credentials(HttpHeaderCredentials.class, creds -> {
                 creds.setName("X-Elastic-No-KPI");
                 creds.setValue("1");
             });
-            ivyRepo.getAuthentication().create("header", HttpHeaderAuthentication.class);
-            ivyRepo.patternLayout(layout -> layout.artifact("/downloads/elasticsearch/[module]-[revision](-[classifier]).[ext]"));
-            ivyRepo.content(content -> content.includeGroup(group));
+            repo.getAuthentication().create("header", HttpHeaderAuthentication.class);
+            repo.patternLayout(layout -> layout.artifact("/downloads/elasticsearch/[module]-[revision](-[classifier]).[ext]"));
         });
-        project.getRepositories().all(repo -> {
-            if (repo.getName().equals(name) == false) {
-                // all other repos should ignore the special group name
-                repo.content(content -> content.excludeGroup(group));
-            }
+        project.getRepositories().exclusiveContent(exclusiveContentRepository -> {
+            exclusiveContentRepository.filter(config -> config.includeGroup(group));
+            exclusiveContentRepository.forRepositories(ivyRepo);
         });
     }
 

+ 10 - 17
buildSrc/src/main/java/org/elasticsearch/gradle/JdkDownloadPlugin.java

@@ -79,16 +79,6 @@ public class JdkDownloadPlugin implements Plugin<Project> {
                 setupRootJdkDownload(project.getRootProject(), jdk);
             }
         });
-
-        // all other repos should ignore the special jdk artifacts
-        project.getRootProject().getRepositories().all(repo -> {
-            if (repo.getName().startsWith(REPO_NAME_PREFIX) == false) {
-                repo.content(content -> {
-                    content.excludeGroup("adoptopenjdk");
-                    content.excludeGroup("openjdk");
-                });
-            }
-        });
     }
 
     @SuppressWarnings("unchecked")
@@ -145,13 +135,16 @@ public class JdkDownloadPlugin implements Plugin<Project> {
             }
 
             // Define the repository if we haven't already
-            if (rootProject.getRepositories().findByName(repoName) == null) {
-                repositories.ivy(ivyRepo -> {
-                    ivyRepo.setName(repoName);
-                    ivyRepo.setUrl(repoUrl);
-                    ivyRepo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
-                    ivyRepo.patternLayout(layout -> layout.artifact(artifactPattern));
-                    ivyRepo.content(content -> content.includeGroup(jdk.getVendor()));
+            if (repositories.findByName(repoName) == null) {
+                IvyArtifactRepository ivyRepo = repositories.ivy(repo -> {
+                    repo.setName(repoName);
+                    repo.setUrl(repoUrl);
+                    repo.metadataSources(IvyArtifactRepository.MetadataSources::artifact);
+                    repo.patternLayout(layout -> layout.artifact(artifactPattern));
+                });
+                repositories.exclusiveContent(exclusiveContentRepository -> {
+                    exclusiveContentRepository.filter(config -> config.includeGroup(jdk.getVendor()));
+                    exclusiveContentRepository.forRepositories(ivyRepo);
                 });
             }