Another bnd code refresh
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1360983 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Builder.java b/bundleplugin/src/main/java/aQute/lib/osgi/Builder.java
index b31be5c..152f326 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Builder.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/Builder.java
@@ -15,6 +15,7 @@
import aQute.bnd.make.metatype.*;
import aQute.bnd.maven.*;
import aQute.bnd.service.*;
+import aQute.bnd.service.RepositoryPlugin.Strategy;
import aQute.bnd.service.diff.*;
import aQute.lib.collections.*;
import aQute.lib.osgi.Descriptors.PackageRef;
@@ -1504,23 +1505,17 @@
System.err.printf("baseline %s%n", diffs);
+ Jar other = getBaselineJar();
+ if (other == null) {
+ return;
+ }
Baseline baseline = new Baseline(this, differ);
-
- for (Entry<String,Attrs> entry : diffs.entrySet()) {
- String path = entry.getKey();
- File file = getFile(path);
- if (!file.isFile()) {
- error("Diffing against %s that is not a file", file);
- continue;
- }
- Jar other = new Jar(file);
- Set<Info> infos = baseline.baseline(dot, other, null);
- for (Info info : infos) {
- if (info.mismatch) {
- error("%s %-50s %-10s %-10s %-10s %-10s %-10s\n", info.mismatch ? '*' : ' ', info.packageName,
- info.packageDiff.getDelta(), info.newerVersion, info.olderVersion, info.suggestedVersion,
- info.suggestedIfProviders == null ? "-" : info.suggestedIfProviders);
- }
+ Set<Info> infos = baseline.baseline(dot, other, null);
+ for (Info info : infos) {
+ if (info.mismatch) {
+ error("%s %-50s %-10s %-10s %-10s %-10s %-10s\n", info.mismatch ? '*' : ' ', info.packageName,
+ info.packageDiff.getDelta(), info.newerVersion, info.olderVersion, info.suggestedVersion,
+ info.suggestedIfProviders == null ? "-" : info.suggestedIfProviders);
}
}
}
@@ -1531,4 +1526,50 @@
}
}
+ public Jar getBaselineJar() throws Exception {
+
+ List<RepositoryPlugin> repos = getPlugins(RepositoryPlugin.class);
+
+ Parameters diffs = parseHeader(getProperty("-baseline"));
+ File baselineFile = null;
+ if (diffs.isEmpty()) {
+ String repoName = getProperty("-baseline-repo");
+ if (repoName == null) {
+ return null;
+ }
+ for (RepositoryPlugin repo : repos) {
+ if (repoName.equals(repo.getName())) {
+ baselineFile = repo.get(getBsn(), null, Strategy.HIGHEST, null);
+ break;
+ }
+ }
+ } else {
+
+ String bsn = null;
+ String version = null;
+ for (Entry<String,Attrs> entry : diffs.entrySet()) {
+ bsn = entry.getKey();
+ if ("@".equals(bsn)) {
+ bsn = getBsn();
+ }
+ version = entry.getValue().get(Constants.VERSION_ATTRIBUTE);
+ break;
+ }
+
+ for (RepositoryPlugin repo : repos) {
+ if (version == null) {
+ baselineFile = repo.get(bsn, null, Strategy.HIGHEST, null);
+ } else {
+ baselineFile = repo.get(bsn, version, Strategy.EXACT, null);
+ }
+ if (baselineFile != null) {
+ break;
+ }
+ }
+ }
+ if (baselineFile == null) {
+ return new Jar(".");
+ }
+ return new Jar(baselineFile);
+ }
}
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Constants.java b/bundleplugin/src/main/java/aQute/lib/osgi/Constants.java
index 7454087..767e516 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Constants.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/Constants.java
@@ -110,6 +110,16 @@
String RUNSYSTEMPACKAGES = "-runsystempackages";
String RUNBUNDLES = "-runbundles";
String RUNREPOS = "-runrepos";
+
+ /**
+ * @deprecated This is for support of the legacy OBR requirement format, use {@link #RUNREQUIRES} for new format.
+ */
+ @Deprecated
+ String RUNREQUIRE = "-runrequire";
+
+ String RUNREQUIRES = "-runrequires";
+
+ String RUNEE = "-runee";
String RUNPATH = "-runpath";
String RUNSTORAGE = "-runstorage";
String RUNBUILDS = "-runbuilds";
@@ -250,7 +260,6 @@
Charset DEFAULT_CHARSET = Charset.forName("UTF8");
String VERSION_FILTER = "version";
String PROVIDER_TYPE_DIRECTIVE = "x-provider-type:";
-
/**
* Component constants
*/
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Macro.java b/bundleplugin/src/main/java/aQute/lib/osgi/Macro.java
index 3e109d6..8730b69 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Macro.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/Macro.java
@@ -854,7 +854,7 @@
if (patterns[i] != null) {
Matcher m = patterns[i].matcher(args[i]);
if (!m.matches())
- message += String.format("Argument %s (%s) does not match %s\n", i, args[i],
+ message += String.format("Argument %s (%s) does not match %s%n", i, args[i],
patterns[i].pattern());
}
}
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/Processor.java b/bundleplugin/src/main/java/aQute/lib/osgi/Processor.java
index c6b5dd9..ef4013f 100755
--- a/bundleplugin/src/main/java/aQute/lib/osgi/Processor.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/Processor.java
@@ -1254,15 +1254,15 @@
protected void report(Appendable out) throws IOException {
if (errors.size() > 0) {
- out.append("-----------------\nErrors\n");
+ out.append(String.format("-----------------%nErrors%n"));
for (int i = 0; i < errors.size(); i++) {
- out.append(String.format("%03d: %s\n", i, errors.get(i)));
+ out.append(String.format("%03d: %s%n", i, errors.get(i)));
}
}
if (warnings.size() > 0) {
- out.append(String.format("-----------------\nWarnings\n"));
+ out.append(String.format("-----------------%nWarnings%n"));
for (int i = 0; i < warnings.size(); i++) {
- out.append(String.format("%03d: %s\n", i, warnings.get(i)));
+ out.append(String.format("%03d: %s%n", i, warnings.get(i)));
}
}
}
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReq.java b/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReq.java
index 3f07825..c175060 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReq.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReq.java
@@ -5,6 +5,7 @@
import java.util.Map;
import org.osgi.resource.Capability;
+import org.osgi.resource.Namespace;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
@@ -90,8 +91,18 @@
@Override
public String toString() {
- return mode + " [namespace=" + namespace + ", resource=" + System.identityHashCode(resource) + ", directives="
- + directives + ", attributes=" + attributes + "]";
+ StringBuilder builder = new StringBuilder();
+ if (mode == MODE.Capability) {
+ Object value = attributes.get(namespace);
+ builder.append(namespace).append('=').append(value);
+ } else {
+ String filter = directives.get(Namespace.REQUIREMENT_FILTER_DIRECTIVE);
+ builder.append(filter);
+ if (Namespace.RESOLUTION_OPTIONAL.equals(directives.get(Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE))) {
+ builder.append("%OPT");
+ }
+ }
+ return builder.toString();
}
}
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReqBuilder.java b/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReqBuilder.java
index 654c7de..1e259c9 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReqBuilder.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/resource/CapReqBuilder.java
@@ -26,6 +26,20 @@
this.namespace = namespace;
}
+ public static CapReqBuilder clone(Capability capability) {
+ CapReqBuilder builder = new CapReqBuilder(capability.getNamespace());
+ builder.addAttributes(capability.getAttributes());
+ builder.addDirectives(capability.getDirectives());
+ return builder;
+ }
+
+ public static CapReqBuilder clone(Requirement requirement) {
+ CapReqBuilder builder = new CapReqBuilder(requirement.getNamespace());
+ builder.addAttributes(requirement.getAttributes());
+ builder.addDirectives(requirement.getDirectives());
+ return builder;
+ }
+
public String getNamespace() {
return namespace;
}
@@ -39,12 +53,22 @@
attributes.put(name, value);
return this;
}
+
+ public CapReqBuilder addAttributes(Map<? extends String, ? extends Object> attributes) {
+ this.attributes.putAll(attributes);
+ return this;
+ }
public CapReqBuilder addDirective(String name, String value) {
directives.put(name, value);
return this;
}
+ public CapReqBuilder addDirectives(Map<? extends String, ? extends String> directives) {
+ this.directives.putAll(directives);
+ return this;
+ }
+
public Capability buildCapability() {
// TODO check the thrown exception
if (resource == null) throw new IllegalStateException("Cannot build Capability with null Resource.");
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceBuilder.java b/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceBuilder.java
index cd9b982..9e9cde3 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceBuilder.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceBuilder.java
@@ -15,6 +15,11 @@
private boolean built = false;
+ public ResourceBuilder addCapability(Capability capability) {
+ CapReqBuilder builder = CapReqBuilder.clone(capability);
+ return addCapability(builder);
+ }
+
public ResourceBuilder addCapability(CapReqBuilder builder) {
if (built)
throw new IllegalStateException("Resource already built");
@@ -24,7 +29,12 @@
return this;
}
-
+
+ public ResourceBuilder addRequirement(Requirement requirement) {
+ CapReqBuilder builder = CapReqBuilder.clone(requirement);
+ return addRequirement(builder);
+ }
+
public ResourceBuilder addRequirement(CapReqBuilder builder) {
if (built)
throw new IllegalStateException("Resource already built");
diff --git a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceImpl.java b/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceImpl.java
index 3fa6218..7305148 100644
--- a/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceImpl.java
+++ b/bundleplugin/src/main/java/aQute/lib/osgi/resource/ResourceImpl.java
@@ -5,6 +5,7 @@
import java.util.List;
import java.util.Map;
+import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
@@ -55,12 +56,22 @@
@Override
public String toString() {
- StringBuilder builder = new StringBuilder();
- builder.append("ResourceImpl [caps=");
- builder.append(allCapabilities);
- builder.append(", reqs=");
- builder.append(allRequirements);
- builder.append("]");
+ final StringBuilder builder = new StringBuilder();
+ List<Capability> identities = getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE);
+ if (identities != null && identities.size() == 1) {
+ Capability idCap = identities.get(0);
+ Object id = idCap.getAttributes().get(IdentityNamespace.IDENTITY_NAMESPACE);
+ Object version = idCap.getAttributes().get(IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE);
+
+ builder.append(id).append(" ver=").append(version);
+ } else {
+ // Generic toString
+ builder.append("ResourceImpl [caps=");
+ builder.append(allCapabilities);
+ builder.append(", reqs=");
+ builder.append(allRequirements);
+ builder.append("]");
+ }
return builder.toString();
}