You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2017/08/29 11:34:56 UTC
karaf git commit: [KARAF-5324] Use the felix VersionRange so that
versions are cleaned
Repository: karaf
Updated Branches:
refs/heads/master b8818c0bd -> 87b0b990b
[KARAF-5324] Use the felix VersionRange so that versions are cleaned
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/87b0b990
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/87b0b990
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/87b0b990
Branch: refs/heads/master
Commit: 87b0b990b9bb7fa1daf961db2d1fbd008804b83c
Parents: b8818c0
Author: Guillaume Nodet <gn...@apache.org>
Authored: Tue Aug 29 13:34:14 2017 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Tue Aug 29 13:34:14 2017 +0200
----------------------------------------------------------------------
.../features/internal/service/FeatureReq.java | 29 ++++++++------------
1 file changed, 11 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/87b0b990/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureReq.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureReq.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureReq.java
index a573642..1a34f8b 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureReq.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureReq.java
@@ -16,32 +16,30 @@
*/
package org.apache.karaf.features.internal.service;
+import org.apache.felix.utils.version.VersionRange;
import org.apache.felix.utils.version.VersionTable;
import org.apache.karaf.features.Feature;
import org.osgi.framework.Version;
-import org.osgi.framework.VersionRange;
-import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
-import java.util.function.Predicate;
import java.util.regex.Pattern;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static org.apache.felix.utils.version.VersionRange.ANY_VERSION;
import static org.apache.karaf.features.internal.util.MapUtils.filter;
/**
* Requirement for a feature
*
* <p>The syntax of a requirement as a String is name[/versionRange].
- * If no versionRange is given then a range of [0,) is assumeed which matches all versions.
+ * If no versionRange is given then a range of [0,) is assumed which matches all versions.
*
* <p>
- * - name: Can be a feature name or a glob like myfeat*
+ * - name: Can be a feature name or a regexp like myfeat.*
* - versionRange: version or range
* - version: Will specify a specific version. Like [version,version]. An exemption is 0.0.0 which matches all versions.
* - range: Like defined in OSGi VersionRange. Example: [1.0.0, 1.1.0)
@@ -50,7 +48,6 @@ public class FeatureReq {
public static final String VERSION_SEPARATOR = "/";
- private static final VersionRange RANGE_ALL = new VersionRange(VersionRange.LEFT_CLOSED, Version.emptyVersion, null, VersionRange.RIGHT_OPEN);
private static final String FEATURE_OSGI_REQUIREMENT_PREFIX = "feature:";
private String name;
@@ -71,7 +68,7 @@ public class FeatureReq {
public FeatureReq(String nameAndRange) {
String[] parts = nameAndRange.trim().split(VERSION_SEPARATOR);
this.name = parts[0];
- this.versionRange = (parts.length == 1) ? RANGE_ALL : range(parts[1]);
+ this.versionRange = (parts.length == 1) ? ANY_VERSION : range(parts[1]);
}
public FeatureReq(String name, String versionRange) {
@@ -98,9 +95,8 @@ public class FeatureReq {
public Set<FeatureReq> getMatchingRequirements(Set<FeatureReq> reqs) {
Pattern pattern = Pattern.compile(name);
- // TODO: should we use the intersection of the 2 ranges ?
return filter(reqs, fr -> pattern.matcher(fr.getName()).matches()
- && versionRange.includes(fr.getVersionRange().getLeft()));
+ && versionRange.intersect(fr.getVersionRange()) != null);
}
public Stream<Feature> getMatchingFeatures(Map<String, Map<String, Feature>> allFeatures) {
@@ -122,7 +118,7 @@ public class FeatureReq {
Version latest = Version.emptyVersion;
for (String available : versions.keySet()) {
Version availableVersion = VersionTable.getVersion(available);
- if (availableVersion.compareTo(latest) >= 0 && versionRange.includes(availableVersion)) {
+ if (availableVersion.compareTo(latest) >= 0 && versionRange.contains(availableVersion)) {
feature = versions.get(available);
latest = availableVersion;
}
@@ -156,24 +152,21 @@ public class FeatureReq {
private static VersionRange range(String versionRange) {
if (versionRange == null) {
- return RANGE_ALL;
+ return ANY_VERSION;
}
versionRange = versionRange.trim();
if ("0.0.0".equals(versionRange)) {
- return RANGE_ALL;
+ return ANY_VERSION;
}
if (versionRange.contains(",")) {
- return new VersionRange(versionRange);
+ return new VersionRange(versionRange, false, true);
} else {
return exactVersion(versionRange);
}
}
private static VersionRange exactVersion(String versionRange) {
- return new VersionRange(VersionRange.LEFT_CLOSED,
- new Version(versionRange),
- new Version(versionRange),
- VersionRange.RIGHT_CLOSED);
+ return new VersionRange(versionRange, true, true);
}
}