Skip to content

Commit

Permalink
fix (model): Find the 'origin' repo of a Maven Artifact
Browse files Browse the repository at this point in the history
  • Loading branch information
vorburger committed Feb 8, 2025
1 parent 7b103ef commit f4cec46
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 9 deletions.
17 changes: 14 additions & 3 deletions java/dev/enola/model/enola/maven/connect/mima/LearnMimaTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.junit.Test;

public class LearnMimaTest {
import java.net.URI;

// TODO Origin repo
public class LearnMimaTest {

// TODO XML

Expand All @@ -44,8 +44,19 @@ public class LearnMimaTest {
@Test
public void mariaDB4j() throws RepositoryException {
try (var mima = new Mima()) {
var model = mima.get("ch.vorburger.mariaDB4j:mariaDB4j-core:3.1.0").getEffectiveModel();
var gav = "ch.vorburger.mariaDB4j:mariaDB4j-core:3.1.0";
var response = mima.get(gav);
var model = response.getEffectiveModel();
assertThat(model).isNotNull();

// Origin:
assertThat(Mima.origin(response))
.hasValue(URI.create("https://repo.maven.apache.org/maven2/"));
// Do it again, to see if it still works a 2nd time, even when it's already DL:
response = mima.get(gav);
model = response.getEffectiveModel();
assertThat(Mima.origin(response))
.hasValue(URI.create("https://repo.maven.apache.org/maven2/"));
}
}

Expand Down
41 changes: 35 additions & 6 deletions java/dev/enola/model/enola/maven/connect/mima/Mima.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,32 +28,48 @@
import eu.maveniverse.maven.mima.extensions.mmr.ModelResponse;

import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.resolution.ArtifactDescriptorException;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.VersionResolutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.URI;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Optional;

public class Mima implements AutoCloseable {

private final Logger logger = LoggerFactory.getLogger(getClass());
private static final Logger logger = LoggerFactory.getLogger(Mima.class);

private final Context context;
private final MavenModelReader mmr;

public Mima() {
var overrides =
this(
ContextOverrides.create()
// TODO repositories() - ContextOverrides.AddRepositoriesOp?
// TODO transferListener() to log progress?
.checksumPolicy(FAIL)
.snapshotUpdatePolicy(NEVER)
.build();
.snapshotUpdatePolicy(NEVER));
// TODO https://maven.apache.org/resolver/configuration.html configProperties() ?!
}

public Mima(ContextOverrides.Builder contextOverridesBuilder) {
contextOverridesBuilder.checksumPolicy(FAIL);

var env = "TEST_TMPDIR"; // see https://bazel.build/reference/test-encyclopedia
var tmp = System.getenv(env);
if (tmp != null) {
Path m2repo = Paths.get(tmp, "maven/repo");
contextOverridesBuilder.withLocalRepositoryOverride(m2repo);
}

var runtime = Runtimes.INSTANCE.getRuntime();
logger.info("Mima Maven Version: {}", runtime.mavenVersion());

this.context = runtime.create(overrides);
this.context = runtime.create(contextOverridesBuilder.build());
this.mmr = new MavenModelReader(context);
}

Expand Down Expand Up @@ -82,6 +98,19 @@ public ModelResponse get(String gav)
.setRequestContext(gav)
.build();
var response = mmr.readModel(request);
if (response == null) throw new IllegalArgumentException(gav);
return response;
}

// Utilities

public static Optional<URI> origin(ModelResponse modelResponse) {
var model = modelResponse.getRawModel();
var artifactDescriptorResult = modelResponse.toArtifactDescriptorResult(model);
var repository = artifactDescriptorResult.getRepository();
if (repository instanceof RemoteRepository remoteRepository) {
return Optional.of(URI.create(remoteRepository.getUrl()));
}
return Optional.empty();
}
}

0 comments on commit f4cec46

Please sign in to comment.