Skip to content

Commit

Permalink
Migrate form (maven) RepositorySystem > (aether) RepositorySystem
Browse files Browse the repository at this point in the history
  • Loading branch information
laeubi committed Sep 11, 2024
1 parent af15960 commit 0abeedc
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;

import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.repository.MavenArtifactRepository;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.LegacySupport;
import org.apache.maven.repository.RepositorySystem;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.Settings;
Expand All @@ -36,6 +38,8 @@
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.util.StringUtils;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.tycho.MavenRepositoryLocation;
import org.eclipse.tycho.MavenRepositorySettings;
import org.eclipse.tycho.p2maven.helper.SettingsDecrypterHelper;
Expand All @@ -54,8 +58,6 @@ public class DefaultMavenRepositorySettings implements MavenRepositorySettings,
@Requirement
private SettingsDecrypterHelper decrypter;

@Requirement
private RepositorySystem repositorySystem;
@Requirement(hint = "p2")
private ArtifactRepositoryLayout p2layout;

Expand All @@ -65,13 +67,15 @@ public class DefaultMavenRepositorySettings implements MavenRepositorySettings,

private List<Mirror> mirrors;

private RepositorySystemSession repositorySession;

public DefaultMavenRepositorySettings() {
// for plexus
}

public DefaultMavenRepositorySettings(RepositorySystem repositorySystem) {
// for test
this.repositorySystem = repositorySystem;
public DefaultMavenRepositorySettings(RepositorySystemSession repositorySystemSession) {
// for test
repositorySession = repositorySystemSession;
}

@Override
Expand All @@ -82,7 +86,7 @@ public MavenRepositoryLocation getMirror(MavenRepositoryLocation location) {
if (idToMirrorMap.containsKey(location.getId())) {
return new MavenRepositoryLocation(location.getId(), idToMirrorMap.get(location.getId()));
}
ArtifactRepository locationAsMavenRepository = repositorySystem.createArtifactRepository(location.getId(),
ArtifactRepository locationAsMavenRepository = new MavenArtifactRepository(location.getId(),
location.getURL().toString(), p2layout, P2_REPOSITORY_POLICY, P2_REPOSITORY_POLICY);
Mirror mirror = getTychoMirror(locationAsMavenRepository, mirrors);
if (mirror != null) {
Expand All @@ -109,7 +113,7 @@ public MavenRepositorySettings.Credentials getCredentials(MavenRepositoryLocatio

public Mirror getTychoMirror(ArtifactRepository repository, List<Mirror> mirrors) {
// if we find a mirror the default way (the maven way) we will use that mirror
Mirror mavenMirror = repositorySystem.getMirror(repository, mirrors);
Mirror mavenMirror = getMirror(repositorySession, RepositoryUtils.toRepo(repository)).orElse(null);
if (mavenMirror != null || mirrors == null) {
return mavenMirror;
}
Expand Down Expand Up @@ -154,6 +158,7 @@ public void initialize() throws InitializationException {
if (session != null) {
settings = session.getSettings();
mirrors = session.getRequest().getMirrors();
repositorySession = session.getRepositorySession();
} else {
settings = new Settings();
mirrors = Collections.emptyList();
Expand All @@ -164,4 +169,22 @@ public void initialize() throws InitializationException {
public Stream<MavenRepositoryLocation> getMirrors() {
return mirrors.stream().map(m -> new MavenRepositoryLocation(m.getId(), URI.create(m.getUrl())));
}

private static Optional<Mirror> getMirror(RepositorySystemSession session, RemoteRepository remoteRepository) {
if (session != null) {
org.eclipse.aether.repository.MirrorSelector selector = session.getMirrorSelector();
if (selector != null) {
RemoteRepository repo = selector.getMirror(remoteRepository);
if (repo != null) {
Mirror mirror = new Mirror();
mirror.setId(repo.getId());
mirror.setUrl(repo.getUrl());
mirror.setLayout(repo.getContentType());
mirror.setBlocked(repo.isBlocked());
return Optional.of(mirror);
}
}
}
return Optional.empty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,40 +15,39 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.util.Arrays;
import java.util.List;

import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.MavenArtifactRepository;
import org.apache.maven.repository.DefaultMirrorSelector;
import org.apache.maven.repository.RepositorySystem;
import org.apache.maven.settings.Mirror;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.repository.MirrorSelector;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.tycho.p2maven.repository.DefaultMavenRepositorySettings;
import org.eclipse.tycho.p2maven.repository.P2ArtifactRepositoryLayout;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

public class TychoMirrorSelectorTest {

private DefaultMavenRepositorySettings selector;

@Before
public void setup() {
RepositorySystem repo = mock(RepositorySystem.class);
doAnswer(new Answer<Mirror>() {
MirrorSelector ms = mock(MirrorSelector.class);
RepositorySystemSession repo = mock(RepositorySystemSession.class);
when(repo.getMirrorSelector()).thenReturn(ms);
doAnswer(invocation -> {

@SuppressWarnings("unchecked")
@Override
public Mirror answer(InvocationOnMock invocation) throws Throwable {

final Object[] args = invocation.getArguments();
return new DefaultMirrorSelector().getMirror((ArtifactRepository) args[0], (List<Mirror>) args[1]);
final Object[] args = invocation.getArguments();
if (args[0] instanceof RemoteRepository rr && rr.getId().equals("neon-repo")) {
return new RemoteRepository.Builder("myId", rr.getContentType(), "http://foo.bar").build();
}
}).when(repo).getMirror(any(), any());
return null;
}).when(ms).getMirror(any());
selector = new DefaultMavenRepositorySettings(repo);

}
Expand All @@ -59,7 +58,7 @@ public void testWithMatchingMirrorOfIds() {
"https://download.eclipse.org/eclipse/update/4.6");
Mirror mirrorWithMatchingMirrorOfIds = createMirror("myId", "http://foo.bar", "neon-repo");
Mirror selectedMirror = selector.getTychoMirror(repository, Arrays.asList(mirrorWithMatchingMirrorOfIds));
Assert.assertEquals(mirrorWithMatchingMirrorOfIds, selectedMirror);
Assert.assertEquals(mirrorWithMatchingMirrorOfIds.getId(), selectedMirror.getId());
}

@Test
Expand Down

0 comments on commit 0abeedc

Please sign in to comment.