Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ public String toString() {
public static Parameters toParameters(List<? extends HeaderClause> l) {
Parameters parameters = new Parameters();

l.forEach(hc -> parameters.put(hc.name, hc.attribs));
l.forEach(hc -> parameters.add(hc.name, hc.attribs));

return parameters;
}
Expand Down
9 changes: 6 additions & 3 deletions biz.aQute.resolve/src/biz/aQute/resolve/RunResolution.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package biz.aQute.resolve;

import static aQute.bnd.osgi.Processor.removeDuplicateMarker;
import static java.util.stream.Collectors.toList;

import java.io.File;
Expand All @@ -14,8 +15,6 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;

import aQute.bnd.header.Parameters;
import aQute.bnd.osgi.Instructions;
import org.osgi.resource.Resource;
import org.osgi.resource.Wire;
import org.osgi.service.resolver.ResolutionException;
Expand All @@ -30,13 +29,15 @@
import aQute.bnd.build.model.clauses.HeaderClause;
import aQute.bnd.build.model.clauses.VersionedClause;
import aQute.bnd.exceptions.Exceptions;
import aQute.bnd.header.Parameters;
import aQute.bnd.help.Syntax;
import aQute.bnd.help.instructions.ResolutionInstructions;
import aQute.bnd.help.instructions.ResolutionInstructions.ResolveMode;
import aQute.bnd.help.instructions.ResolutionInstructions.RunStartLevel;
import aQute.bnd.help.instructions.ResolutionInstructions.Runorder;
import aQute.bnd.osgi.BundleId;
import aQute.bnd.osgi.Constants;
import aQute.bnd.osgi.Instructions;
import aQute.bnd.osgi.Processor;
import aQute.bnd.osgi.resource.ResourceUtils;
import aQute.bnd.osgi.resource.ResourceUtils.IdentityCapability;
Expand Down Expand Up @@ -201,8 +202,10 @@ public boolean updateBundles(BndEditModel model) {
Instructions decorator = new Instructions(project.mergeProperties(Constants.RUNBUNDLES_DECORATOR));
decorator.decorate(bundles);


newer = bundles.entrySet()
.stream().map(entry -> new VersionedClause(entry.getKey(), entry.getValue()))
.stream()
.map(entry -> new VersionedClause(removeDuplicateMarker(entry.getKey()), entry.getValue()))
.collect(Collectors.toList());

if (newer.equals(older))
Expand Down
33 changes: 22 additions & 11 deletions biz.aQute.resolve/test/biz/aQute/resolve/RunResolutionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import aQute.bnd.build.model.clauses.HeaderClause;
import aQute.bnd.build.model.clauses.VersionedClause;
import aQute.bnd.build.model.conversions.NoopConverter;
import aQute.bnd.header.Parameters;
import aQute.bnd.help.instructions.ResolutionInstructions.Runorder;
import aQute.bnd.osgi.Constants;
import aQute.bnd.result.Result;
Expand Down Expand Up @@ -517,24 +518,34 @@ public void testPrintHumanReadableDifference() throws Exception {
}

@Test
public void testStartLevelDecoration() throws Exception {
Bndrun bndrun = Bndrun.createBndrun(workspace, IO.getFile(ws.toFile(), "test.simple/resolve.bndrun"));
public void testStartLevelDecoration(SoftAssertions softly) throws Exception {
Bndrun bndrun = Bndrun.createBndrun(workspace, IO.getFile(ws.toFile(), "test.simple/resolveduplicates.bndrun"));
bndrun.setProperty("-runstartlevel", "order=leastdependenciesfirst,begin=100,step=10");

// Decorate test.simple to get startlevel 90 (which would otherwise be 110 within the assigned runstartlevel).
bndrun.setProperty("-runbundles+", "test.simple;startlevel=90");

List<? extends HeaderClause> runBundles = List.copyOf(bndrun.resolve(false, false, new NoopConverter<>()));

assertThat(runBundles).hasSize(2);
assertThat(runBundles.get(0)
.getName()).isEqualTo("osgi.enroute.junit.wrapper");
assertThat(runBundles.get(0)
.getAttribs()).containsEntry(Constants.RUNBUNDLES_STARTLEVEL_ATTRIBUTE, "100");
assertThat(runBundles.get(1)
.getName()).isEqualTo("test.simple");
assertThat(runBundles.get(1)
.getAttribs()).containsEntry(Constants.RUNBUNDLES_STARTLEVEL_ATTRIBUTE, "90");
softly.assertThat(runBundles).hasSize(4);
softly.assertThat(runBundles.stream()
.map(rb -> rb.toString())
.toList())
.containsExactlyInAnyOrder("org.apache.felix.gogo.runtime;version='[0.12.0,0.12.1)';startlevel=100",
"org.apache.felix.gogo.runtime;version='[0.10.0,0.10.1)';startlevel=110",
"osgi.enroute.junit.wrapper;version='[4.12.0,4.12.1)';startlevel=120",
"test.simple;version=snapshot;startlevel=90");

// check that HeaderClause.toParameters does not remove duplicates
// this kind of happens inside bndrun.resolve() let's test explicitly
// again
Parameters params = HeaderClause.toParameters(runBundles);
softly.assertThat(params)
.hasSize(4);
softly.assertThat(params.toString())
.isEqualTo(
"org.apache.felix.gogo.runtime;version=\"[0.12.0,0.12.1)\";startlevel=100,org.apache.felix.gogo.runtime;version=\"[0.10.0,0.10.1)\";startlevel=110,osgi.enroute.junit.wrapper;version=\"[4.12.0,4.12.1)\";startlevel=120,test.simple;version=snapshot;startlevel=90");

}

@SuppressWarnings("resource")
Expand Down
Loading