Skip to content

Commit

Permalink
Fix application of mirrors/auth to repositories whose URLs involve pr…
Browse files Browse the repository at this point in the history
…operty substitution
  • Loading branch information
sambsnyd committed Jan 26, 2024
1 parent f9e5e8e commit 40a5463
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -680,10 +680,12 @@ Collection<MavenRepository> distinctNormalizedRepositories(
@Nullable
public MavenRepository normalizeRepository(MavenRepository originalRepository, MavenExecutionContextView ctx, @Nullable ResolvedPom containingPom) {
Optional<MavenRepository> result = null;
MavenRepository repository = applyAuthenticationToRepository(applyMirrors(originalRepository));
MavenRepository repository = originalRepository;
if (containingPom != null) {
// Parameter substitution in case a repository is defined like "${ARTIFACTORY_URL}/repo"
repository = repository.withUri(containingPom.getValue(repository.getUri()));
}
repository = applyAuthenticationToRepository(applyMirrors(repository));
try {
if (repository.isKnownToExist()) {
return repository;
Expand Down
28 changes: 20 additions & 8 deletions rewrite-maven/src/main/java/org/openrewrite/maven/tree/Pom.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package org.openrewrite.maven.tree;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;
import lombok.With;
import org.openrewrite.ExecutionContext;
Expand All @@ -38,6 +40,8 @@
*/
@Value
@With
@Builder
@AllArgsConstructor
public class Pom {

/**
Expand Down Expand Up @@ -68,14 +72,22 @@ public static int getModelVersion() {
@Nullable
String packaging;

Map<String, String> properties;
List<ManagedDependency> dependencyManagement;
List<Dependency> dependencies;
List<MavenRepository> repositories;
List<License> licenses;
List<Profile> profiles;
List<Plugin> plugins;
List<Plugin> pluginManagement;
@Builder.Default
Map<String, String> properties = emptyMap();
@Builder.Default
List<ManagedDependency> dependencyManagement = emptyList();
@Builder.Default
List<Dependency> dependencies = emptyList();
@Builder.Default
List<MavenRepository> repositories = emptyList();
@Builder.Default
List<License> licenses = emptyList();
@Builder.Default
List<Profile> profiles = emptyList();
@Builder.Default
List<Plugin> plugins = emptyList();
@Builder.Default
List<Plugin> pluginManagement = emptyList();

public String getGroupId() {
return gav.getGroupId();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.Builder;
import lombok.Getter;
import lombok.Value;
import lombok.With;
Expand All @@ -48,6 +49,7 @@

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@ref")
@Getter
@Builder
public class ResolvedPom {

public static final PropertyPlaceholderHelper placeholderHelper = new PropertyPlaceholderHelper("${", "}", null);
Expand Down Expand Up @@ -82,25 +84,32 @@ public ResolvedPom(Pom requested, Iterable<String> activeProfiles) {
}

@NonFinal
Map<String, String> properties;
@Builder.Default
Map<String, String> properties = emptyMap();

@NonFinal
List<ResolvedManagedDependency> dependencyManagement;
@Builder.Default
List<ResolvedManagedDependency> dependencyManagement = emptyList();

@NonFinal
List<MavenRepository> initialRepositories;
@Builder.Default
List<MavenRepository> initialRepositories = emptyList();

@NonFinal
List<MavenRepository> repositories;
@Builder.Default
List<MavenRepository> repositories = emptyList();

@NonFinal
List<Dependency> requestedDependencies;
@Builder.Default
List<Dependency> requestedDependencies = emptyList();

@NonFinal
List<Plugin> plugins;
@Builder.Default
List<Plugin> plugins = emptyList();

@NonFinal
List<Plugin> pluginManagement;
@Builder.Default
List<Plugin> pluginManagement = emptyList();


/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;

import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static java.util.Collections.*;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openrewrite.maven.tree.MavenRepository.MAVEN_CENTRAL;

@SuppressWarnings({"HttpUrlsUsage"})
class MavenPomDownloaderTest {
Expand Down Expand Up @@ -141,7 +141,7 @@ public void repository(MavenRepository mavenRepository, @Nullable ResolvedPom co

try {
new MavenPomDownloader(ctx)
.download(new GroupArtifactVersion("org.openrewrite", "rewrite-core", "7.0.0"), null, null, Collections.singletonList(nonexistentRepo));
.download(new GroupArtifactVersion("org.openrewrite", "rewrite-core", "7.0.0"), null, null, singletonList(nonexistentRepo));
} catch (Exception e) {
// not expected to succeed
}
Expand Down Expand Up @@ -171,7 +171,7 @@ public void repositoryAccessFailed(String uri, Throwable e) {

try {
new MavenPomDownloader(ctx)
.download(new GroupArtifactVersion("org.openrewrite", "rewrite-core", "7.0.0"), null, null, Collections.singletonList(nonexistentRepo));
.download(new GroupArtifactVersion("org.openrewrite", "rewrite-core", "7.0.0"), null, null, singletonList(nonexistentRepo));
} catch (Exception e) {
// not expected to succeed
}
Expand All @@ -182,14 +182,62 @@ public void repositoryAccessFailed(String uri, Throwable e) {
.isEmpty();
}

@Test
void mirrorsOverrideRepositoriesInPom() {
var ctx = MavenExecutionContextView.view(new InMemoryExecutionContext());
ctx.setMavenSettings(MavenSettings.parse(new Parser.Input(Paths.get("settings.xml"), () -> new ByteArrayInputStream(
//language=xml
"""
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>mirror</id>
<url>https://artifactory.moderne.ninja/artifactory/moderne-cache</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
""".getBytes()
)), ctx));

Path pomPath = Paths.get("pom.xml");
Pom pom = Pom.builder()
.sourcePath(pomPath)
.repository(MAVEN_CENTRAL)
.properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri()))
.gav(new ResolvedGroupArtifactVersion(
"${REPO_URL}", "org.openrewrite", "rewrite-core", "7.0.0", null))
.build();
ResolvedPom resolvedPom = ResolvedPom.builder()
.requested(pom)
.properties(singletonMap("REPO_URL", MAVEN_CENTRAL.getUri()))
.repositories(singletonList(MAVEN_CENTRAL))
.build();

Map<Path, Pom> pomsByPath = new HashMap<>();
pomsByPath.put(pomPath, pom);

MavenPomDownloader mpd = new MavenPomDownloader(pomsByPath, ctx);
MavenRepository normalized = mpd.normalizeRepository(
MavenRepository.builder().id("whatever").uri("${REPO_URL}").build(),
ctx,
resolvedPom
);
assertThat(normalized)
.extracting(MavenRepository::getUri)
.isEqualTo("https://artifactory.moderne.ninja/artifactory/moderne-cache");
}

@Disabled("Flaky on CI")
@Test
void normalizeOssSnapshots() {
var downloader = new MavenPomDownloader(emptyMap(), ctx);
MavenRepository oss = downloader.normalizeRepository(
MavenRepository.builder().id("oss").uri("https://oss.sonatype.org/content/repositories/snapshots").build(),
MavenExecutionContextView.view(ctx),
null);
MavenExecutionContextView.view(ctx), null);

assertThat(oss).isNotNull();
assertThat(oss.getUri()).isEqualTo("https://oss.sonatype.org/content/repositories/snapshots");
Expand Down Expand Up @@ -239,9 +287,7 @@ void normalizeRejectConnectException() {
var downloader = new MavenPomDownloader(emptyMap(), ctx);
var normalizedRepository = downloader.normalizeRepository(
MavenRepository.builder().id("id").uri("https//localhost").build(),
MavenExecutionContextView.view(ctx),
null
);
MavenExecutionContextView.view(ctx), null);
assertThat(normalizedRepository).isEqualTo(null);
}

Expand Down

0 comments on commit 40a5463

Please sign in to comment.