Skip to content

Commit

Permalink
Use dependency metadata instead of MavenProjectDependencyProcessor
Browse files Browse the repository at this point in the history
Currently full dependency closure is computed to determine if a unit is
a reactor project. Instead one could/should use the dependency metadata.

(cherry picked from commit a20b8bb)
  • Loading branch information
laeubi authored and eclipse-tycho-bot committed Jun 2, 2024
1 parent b370822 commit 90a03b6
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 17 deletions.
1 change: 1 addition & 0 deletions tycho-its/projects/sbom/.mvn/maven.config
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
-Dtycho-version=5.0.0-SNAPSHOT
-Dtycho.localArtifacts=ignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
import java.io.File;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.List;
import java.util.Optional;

import org.apache.maven.it.Verifier;
import org.cyclonedx.exception.ParseException;
Expand Down Expand Up @@ -242,7 +244,8 @@ private void verifyDependency(Dependency parent, String ref) {
}

private void verifyDependency(List<Dependency> dependencies, String ref) {
if (dependencies.stream().noneMatch(dependency -> match(dependency, ref))) {
if (Optional.ofNullable(dependencies).stream().flatMap(Collection::stream)
.noneMatch(dependency -> match(dependency, ref))) {
fail("No dependency found matching: " + ref);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
package org.eclipse.tycho.sbom;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
Expand All @@ -34,10 +33,11 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.tycho.IDependencyMetadata.DependencyMetadataType;
import org.eclipse.tycho.ReactorProject;
import org.eclipse.tycho.core.osgitools.DefaultReactorProject;
import org.eclipse.tycho.p2.tools.P2DependencyTreeGenerator;
import org.eclipse.tycho.p2.tools.P2DependencyTreeGenerator.DependencyTreeNode;
import org.eclipse.tycho.p2maven.MavenProjectDependencyProcessor;
import org.eclipse.tycho.p2maven.MavenProjectDependencyProcessor.ProjectDependencyClosure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -54,9 +54,6 @@ public class TychoProjectDependenciesConverter extends DefaultProjectDependencie
@Inject
private P2DependencyTreeGenerator dependencyGenerator;

@Inject
private MavenProjectDependencyProcessor dependencyProcessor;

@Override
public void cleanupBomDependencies(Metadata metadata, Map<String, Component> components,
Map<String, Dependency> dependencies) {
Expand Down Expand Up @@ -120,22 +117,19 @@ private List<String> getBomRepresentation(IInstallableUnit iu) {
// mutable!
List<String> bomRefs = new ArrayList<>();
// (I) IU describes local reactor project
try {
ProjectDependencyClosure dependencyClosure = dependencyProcessor
.computeProjectDependencyClosure(reactorProjects, mavenSession);
MavenProject iuProject = dependencyClosure.getProject(iu).orElse(null);
if (iuProject != null) {
String bomRef = modelConverter.generatePackageUrl(iuProject.getArtifact());
for (MavenProject project : reactorProjects) {
ReactorProject reactorProject = DefaultReactorProject.adapt(project);
Set<IInstallableUnit> initalUnits = reactorProject.getDependencyMetadata(DependencyMetadataType.INITIAL);
Set<IInstallableUnit> seedUnits = reactorProject.getDependencyMetadata(DependencyMetadataType.SEED);
if (initalUnits.contains(iu) || seedUnits.contains(iu)) {
String bomRef = modelConverter.generatePackageUrl(project.getArtifact());
if (bomRef == null) {
LOG.error("Unable to calculate BOM for: " + iuProject);
LOG.error("Unable to calculate BOM for: " + project);
return bomRefs;
}
bomRefs.add(bomRef);
return bomRefs;
}
} catch (CoreException e) {
LOG.error(e.getMessage(), e);
return Collections.emptyList();
}
// (II) IU describes external artifact
for (IArtifactKey p2artifactKey : iu.getArtifacts()) {
Expand Down

0 comments on commit 90a03b6

Please sign in to comment.