Skip to content

Commit 135aebb

Browse files
committed
Use XMvn 4.3.0 for reading Maven metadata
1 parent b93f1d7 commit 135aebb

3 files changed

Lines changed: 51 additions & 75 deletions

File tree

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
<dependency>
9090
<groupId>org.fedoraproject.xmvn</groupId>
9191
<artifactId>xmvn-api</artifactId>
92-
<version>4.2.0</version>
92+
<version>4.3.0</version>
9393
</dependency>
9494
<dependency>
9595
<groupId>org.apache.maven</groupId>
@@ -99,7 +99,7 @@
9999
<dependency>
100100
<groupId>org.fedoraproject.xmvn</groupId>
101101
<artifactId>xmvn-core</artifactId>
102-
<version>4.2.0</version>
102+
<version>4.3.0</version>
103103
<scope>runtime</scope>
104104
</dependency>
105105
<dependency>

src/main/java/org/fedoraproject/xmvn/generator/maven/MavenGenerator.java

Lines changed: 40 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package org.fedoraproject.xmvn.generator.maven;
22

3-
import java.io.BufferedInputStream;
4-
import java.io.DataInputStream;
5-
import java.io.EOFException;
63
import java.io.IOException;
7-
import java.io.InputStream;
84
import java.io.PrintWriter;
95
import java.io.Reader;
106
import java.io.StringWriter;
@@ -17,10 +13,6 @@
1713
import java.util.List;
1814
import java.util.Map;
1915
import java.util.Set;
20-
import java.util.stream.Stream;
21-
import java.util.zip.GZIPInputStream;
22-
23-
import javax.xml.stream.XMLStreamException;
2416

2517
import org.apache.maven.model.Extension;
2618
import org.apache.maven.model.Model;
@@ -34,13 +26,14 @@
3426
import org.fedoraproject.xmvn.generator.Collector;
3527
import org.fedoraproject.xmvn.generator.Generator;
3628
import org.fedoraproject.xmvn.generator.logging.Logger;
29+
import org.fedoraproject.xmvn.locator.ServiceLocator;
3730
import org.fedoraproject.xmvn.locator.ServiceLocatorFactory;
3831
import org.fedoraproject.xmvn.metadata.ArtifactAlias;
3932
import org.fedoraproject.xmvn.metadata.ArtifactMetadata;
4033
import org.fedoraproject.xmvn.metadata.Dependency;
41-
import org.fedoraproject.xmvn.metadata.PackageMetadata;
34+
import org.fedoraproject.xmvn.metadata.MetadataRequest;
35+
import org.fedoraproject.xmvn.metadata.MetadataResolver;
4236
import org.fedoraproject.xmvn.metadata.SkippedArtifactMetadata;
43-
import org.fedoraproject.xmvn.metadata.io.stax.MetadataStaxReader;
4437
import org.fedoraproject.xmvn.resolver.ResolutionRequest;
4538
import org.fedoraproject.xmvn.resolver.ResolutionResult;
4639
import org.fedoraproject.xmvn.resolver.Resolver;
@@ -72,39 +65,20 @@ class UniqueArtifact {
7265

7366
class MavenGenerator implements Generator {
7467
private final BuildContext context;
68+
private final MetadataResolver metadataResolver;
7569
private final Resolver resolver;
7670

77-
MavenGenerator(BuildContext context, Resolver resolver) {
71+
MavenGenerator(BuildContext context, MetadataResolver metadataResolver, Resolver resolver) {
7872
this.context = context;
73+
this.metadataResolver = metadataResolver;
7974
this.resolver = resolver;
8075
}
8176

8277
public MavenGenerator(BuildContext context) {
83-
this(context, new ServiceLocatorFactory().createServiceLocator().getService(Resolver.class));
84-
}
85-
86-
private boolean isCompressed(BufferedInputStream bis) throws IOException {
87-
try {
88-
bis.mark(2);
89-
DataInputStream ois = new DataInputStream(bis);
90-
int magic = Short.reverseBytes(ois.readShort()) & 0xFFFF;
91-
return magic == GZIPInputStream.GZIP_MAGIC;
92-
} catch (EOFException e) {
93-
return false;
94-
} finally {
95-
bis.reset();
96-
}
97-
}
98-
99-
private PackageMetadata readMetadata(Path path) throws IOException, XMLStreamException {
100-
try (InputStream fis = Files.newInputStream(path)) {
101-
try (BufferedInputStream bis = new BufferedInputStream(fis, 128)) {
102-
try (InputStream is = isCompressed(bis) ? new GZIPInputStream(bis) : bis) {
103-
MetadataStaxReader reader = new MetadataStaxReader();
104-
return reader.read(is);
105-
}
106-
}
107-
}
78+
ServiceLocator serviceLocator = new ServiceLocatorFactory().createServiceLocator();
79+
this.context = context;
80+
this.metadataResolver = serviceLocator.getService(MetadataResolver.class);
81+
this.resolver = serviceLocator.getService(Resolver.class);
10882
}
10983

11084
private String formatDep(Artifact art, String pkgver, String ns) {
@@ -188,48 +162,42 @@ public void generate(Collector collector) {
188162
Set<Artifact> skipped = new LinkedHashSet<>();
189163
List<UniqueArtifact> umds = new ArrayList<>();
190164
if (Files.isDirectory(prefix)) {
191-
try (Stream<Path> filePaths = Files.find(prefix, 1, (path, attr) -> attr.isRegularFile())) {
192-
for (Path filePath : filePaths.toList()) {
193-
PackageMetadata pmd = readMetadata(filePath);
194-
Subpackage md = new Subpackage(filePath);
195-
for (ArtifactMetadata amd : pmd.getArtifacts()) {
196-
UniqueArtifact umd = new UniqueArtifact(md, amd);
197-
umds.add(umd);
198-
List<Artifact> arts = new ArrayList<>();
199-
arts.add(amd.toArtifact());
200-
for (ArtifactAlias alias : amd.getAliases()) {
201-
arts.add(new DefaultArtifact(alias.getGroupId(), alias.getArtifactId(),
202-
alias.getExtension(), alias.getClassifier(), Artifact.DEFAULT_VERSION));
165+
MetadataRequest mdReq = new MetadataRequest(List.of(prefix.toString()));
166+
metadataResolver.resolveMetadata(mdReq).getPackageMetadataMap().forEach((filePath, pmd) -> {
167+
Subpackage md = new Subpackage(filePath);
168+
for (ArtifactMetadata amd : pmd.getArtifacts()) {
169+
UniqueArtifact umd = new UniqueArtifact(md, amd);
170+
umds.add(umd);
171+
List<Artifact> arts = new ArrayList<>();
172+
arts.add(amd.toArtifact());
173+
for (ArtifactAlias alias : amd.getAliases()) {
174+
arts.add(new DefaultArtifact(alias.getGroupId(), alias.getArtifactId(), alias.getExtension(),
175+
alias.getClassifier(), Artifact.DEFAULT_VERSION));
176+
}
177+
umd.pom = true;
178+
for (Artifact art : arts) {
179+
if (!"pom".equals(art.getExtension())) {
180+
umd.pom = false;
203181
}
204-
umd.pom = true;
205-
for (Artifact art : arts) {
206-
if (!"pom".equals(art.getExtension())) {
207-
umd.pom = false;
208-
}
209-
if (amd.getCompatVersions().isEmpty()) {
210-
umd.artifacts.add(art.setVersion(Artifact.DEFAULT_VERSION));
211-
} else {
212-
for (String ver : amd.getCompatVersions()) {
213-
umd.artifacts.add(art.setVersion(ver));
214-
}
182+
if (amd.getCompatVersions().isEmpty()) {
183+
umd.artifacts.add(art.setVersion(Artifact.DEFAULT_VERSION));
184+
} else {
185+
for (String ver : amd.getCompatVersions()) {
186+
umd.artifacts.add(art.setVersion(ver));
215187
}
216188
}
217-
md.pomOnly &= umd.pom;
218-
for (Artifact vart : umd.artifacts) {
219-
myArtifacts.computeIfAbsent(vart, x -> new ArrayList<>()).add(umd);
220-
}
221189
}
222-
for (SkippedArtifactMetadata smd : pmd.getSkippedArtifacts()) {
223-
Artifact sart = new DefaultArtifact(smd.getGroupId(), smd.getArtifactId(), smd.getExtension(),
224-
smd.getClassifier(), Artifact.DEFAULT_VERSION);
225-
skipped.add(sart);
190+
md.pomOnly &= umd.pom;
191+
for (Artifact vart : umd.artifacts) {
192+
myArtifacts.computeIfAbsent(vart, x -> new ArrayList<>()).add(umd);
226193
}
227194
}
228-
} catch (IOException e) {
229-
throw new UncheckedIOException(e);
230-
} catch (XMLStreamException e) {
231-
throw new RuntimeException(e);
232-
}
195+
for (SkippedArtifactMetadata smd : pmd.getSkippedArtifacts()) {
196+
Artifact sart = new DefaultArtifact(smd.getGroupId(), smd.getArtifactId(), smd.getExtension(),
197+
smd.getClassifier(), Artifact.DEFAULT_VERSION);
198+
skipped.add(sart);
199+
}
200+
});
233201
}
234202
for (UniqueArtifact umd : umds) {
235203
for (Artifact art : umd.artifacts) {

src/test/java/org/fedoraproject/xmvn/generator/maven/MavenGeneratorTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,23 @@
1212
import org.easymock.EasyMock;
1313
import org.easymock.IExpectationSetters;
1414
import org.junit.jupiter.api.BeforeEach;
15+
import org.junit.jupiter.api.Disabled;
1516
import org.junit.jupiter.api.Test;
1617
import org.junit.jupiter.api.io.TempDir;
1718

1819
import org.fedoraproject.xmvn.artifact.DefaultArtifact;
1920
import org.fedoraproject.xmvn.generator.BuildContext;
2021
import org.fedoraproject.xmvn.generator.Collector;
22+
import org.fedoraproject.xmvn.locator.ServiceLocatorFactory;
23+
import org.fedoraproject.xmvn.metadata.MetadataResolver;
2124
import org.fedoraproject.xmvn.resolver.ResolutionRequest;
2225
import org.fedoraproject.xmvn.resolver.ResolutionResult;
2326
import org.fedoraproject.xmvn.resolver.Resolver;
2427

2528
public class MavenGeneratorTest {
2629
private Collector collector;
2730
private BuildContext context;
31+
private MetadataResolver metadataResolver;
2832
private Resolver resolver;
2933
@TempDir
3034
private Path br;
@@ -34,6 +38,7 @@ public void setUp() {
3438
collector = EasyMock.createMock(Collector.class);
3539
context = EasyMock.createMock(BuildContext.class);
3640
resolver = EasyMock.createMock(Resolver.class);
41+
metadataResolver = new ServiceLocatorFactory().createServiceLocator().getService(MetadataResolver.class);
3742
}
3843

3944
private void addBrFile(String loc, String content) throws Exception {
@@ -85,7 +90,7 @@ private void mockResolver(String art, String path, String ns, String cver) {
8590
private void performTest() throws Exception {
8691
EasyMock.expect(context.eval("%{buildroot}")).andReturn(br.toString()).atLeastOnce();
8792
EasyMock.replay(collector, context, resolver);
88-
new MavenGenerator(context, resolver).generate(collector);
93+
new MavenGenerator(context, metadataResolver, resolver).generate(collector);
8994
EasyMock.verify(collector, context, resolver);
9095
}
9196

@@ -145,6 +150,7 @@ public void testSimple() throws Exception {
145150
performTest();
146151
}
147152

153+
@Disabled("XMvn always ignores invalid metadata files")
148154
@Test
149155
public void testEmptyMetadataFile() throws Exception {
150156
addMd("");
@@ -156,6 +162,7 @@ public void testEmptyMetadataFile() throws Exception {
156162
}
157163
}
158164

165+
@Disabled("XMvn always ignores invalid metadata files")
159166
@Test
160167
public void testInvalidMetadata() throws Exception {
161168
addMd("""
@@ -169,6 +176,7 @@ public void testInvalidMetadata() throws Exception {
169176
}
170177
}
171178

179+
@Disabled("XMvn always ignores invalid metadata files")
172180
@Test
173181
public void testMalformedXmlMetadata() throws Exception {
174182
addMd("<trololololo");

0 commit comments

Comments
 (0)