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/06/29 06:26:24 UTC

[1/2] karaf git commit: [KARAF-5199] Fix ordering of candidates when comparing 2 bundles

Repository: karaf
Updated Branches:
  refs/heads/master 4f6af4eaa -> 2cfdcadc9


[KARAF-5199] Fix ordering of candidates when comparing 2 bundles

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/9803938c
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/9803938c
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/9803938c

Branch: refs/heads/master
Commit: 9803938c307b4951105b8ac4def8cc5645f042f4
Parents: 4f6af4e
Author: Guillaume Nodet <gn...@apache.org>
Authored: Thu Jun 29 08:19:16 2017 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Thu Jun 29 08:19:16 2017 +0200

----------------------------------------------------------------------
 .../internal/region/CandidateComparator.java    |  6 ++--
 .../features/internal/region/SubsystemTest.java | 22 +++++++++++++
 .../karaf/features/internal/region/data10/a.mf  |  6 ++++
 .../karaf/features/internal/region/data10/b1.mf |  6 ++++
 .../karaf/features/internal/region/data10/b2.mf |  6 ++++
 .../internal/region/data10/features.xml         | 34 ++++++++++++++++++++
 6 files changed, 78 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/9803938c/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
index 9fecd4b..9980c1b 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
@@ -81,7 +81,9 @@ public class CandidateComparator implements Comparator<Capability> {
             final Resource resource2 = cap2.getResource();
             String n1 = ResolverUtil.getSymbolicName(resource1);
             String n2 = ResolverUtil.getSymbolicName(resource2);
-            c = n1.compareTo(n2);
+            if (n1 != null && n2 != null) {
+                c = n2.compareTo(n1);
+            }
             // Resources looks like identical, but it required by different features/subsystems/regions
             // so use this difference for deterministic heuristic
             if (c == 0) {
@@ -91,7 +93,7 @@ public class CandidateComparator implements Comparator<Capability> {
                     // In case the owners are the same but with different version, prefer the latest one
                     // TODO: this may not be fully correct, as we'd need to separate names/versions
                     // TODO: and do a real version comparison
-                    c = - o1.compareTo(o2);
+                    c = o2.compareTo(o1);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/karaf/blob/9803938c/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
----------------------------------------------------------------------
diff --git a/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java b/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
index f6b6563..378f0ce 100644
--- a/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
+++ b/features/core/src/test/java/org/apache/karaf/features/internal/region/SubsystemTest.java
@@ -305,6 +305,28 @@ public class SubsystemTest {
         verify(resolver, expected);
     }
 
+    @Test
+    public void testBundleNoVersion() throws Exception {
+        RepositoryImpl repo = new RepositoryImpl(getClass().getResource("data10/features.xml").toURI());
+
+        Map<String, Set<String>> features = new HashMap<>();
+        addToMapSet(features, "root", "f");
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        addToMapSet(expected, "root", "a/1.0.0");
+        addToMapSet(expected, "root", "b_2_0/0.0.0");
+
+        SubsystemResolver resolver = new SubsystemResolver(this.resolver, new TestDownloadManager(getClass(), "data10"));
+        resolver.prepare(Arrays.asList(repo.getFeatures()),
+                features,
+                Collections.emptyMap());
+        resolver.resolve(Collections.emptySet(),
+                FeaturesService.DEFAULT_FEATURE_RESOLUTION_RANGE,
+                null, null, null);
+
+        verify(resolver, expected);
+    }
+
     private void verify(SubsystemResolver resolver, Map<String, Set<String>> expected) {
         Map<String, Set<String>> mapping = getBundleNamesPerRegions(resolver);
         if (!expected.equals(mapping)) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/9803938c/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/a.mf
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/a.mf b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/a.mf
new file mode 100644
index 0000000..3c3ebea
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/a.mf
@@ -0,0 +1,6 @@
+Manifest-Version: 1
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: a
+Bundle-Version: 1.0.0
+Import-Package: b
+

http://git-wip-us.apache.org/repos/asf/karaf/blob/9803938c/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b1.mf
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b1.mf b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b1.mf
new file mode 100644
index 0000000..6861e46
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b1.mf
@@ -0,0 +1,6 @@
+Manifest-Version: 1
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: b_1_0
+Bundle-Version: 0
+Export-Package: b
+

http://git-wip-us.apache.org/repos/asf/karaf/blob/9803938c/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b2.mf
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b2.mf b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b2.mf
new file mode 100644
index 0000000..343eab0
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/b2.mf
@@ -0,0 +1,6 @@
+Manifest-Version: 1
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: b_2_0
+Bundle-Version: 0
+Export-Package: b
+

http://git-wip-us.apache.org/repos/asf/karaf/blob/9803938c/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/features.xml
----------------------------------------------------------------------
diff --git a/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/features.xml b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/features.xml
new file mode 100644
index 0000000..f00c12c
--- /dev/null
+++ b/features/core/src/test/resources/org/apache/karaf/features/internal/region/data10/features.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements. See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License. You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<features name="test" xmlns="http://karaf.apache.org/xmlns/features/v1.3.0">
+
+    <feature name="f">
+        <feature>d</feature>
+        <bundle>a</bundle>
+    </feature>
+
+    <feature name="d" version="1.0">
+        <bundle>b1</bundle>
+    </feature>
+
+    <feature name="d" version="2.0">
+        <bundle>b2</bundle>
+    </feature>
+
+</features>
\ No newline at end of file


[2/2] karaf git commit: [KARAF-5230] Support version range when installing features The feature is still pre-selected, but at least it does not reject the feature

Posted by gn...@apache.org.
[KARAF-5230] Support version range when installing features
The feature is still pre-selected, but at least it does not reject the feature

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/2cfdcadc
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/2cfdcadc
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/2cfdcadc

Branch: refs/heads/master
Commit: 2cfdcadc99849e01ffac33b96f139d4fe08369bf
Parents: 9803938
Author: Guillaume Nodet <gn...@apache.org>
Authored: Thu Jun 29 08:26:15 2017 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Thu Jun 29 08:26:15 2017 +0200

----------------------------------------------------------------------
 .../internal/service/FeaturesServiceImpl.java         | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/2cfdcadc/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
index e27b796..9600f11 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
@@ -793,7 +793,9 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
         List<String> featuresToAdd = new ArrayList<>();
         List<String> featuresToRemove = new ArrayList<>();
         for (String feature : features) {
-            feature = normalize(feature);
+            if (!feature.contains(VERSION_SEPARATOR)) {
+                feature += "/0.0.0";
+            }
             String name = feature.substring(0, feature.indexOf(VERSION_SEPARATOR));
             String version = feature.substring(feature.indexOf(VERSION_SEPARATOR) + 1);
             Pattern pattern = Pattern.compile(name);
@@ -837,10 +839,18 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
             }
         }
         featuresToAdd = new ArrayList<>(new LinkedHashSet<>(featuresToAdd));
-        print("Adding features: " + join(featuresToAdd), options.contains(Option.Verbose));
+        List<String> featuresToDisplay = new ArrayList<>();
         for (String feature : featuresToAdd) {
             fl.add(FEATURE_OSGI_REQUIREMENT_PREFIX + feature);
+            String v = feature.substring(feature.indexOf(VERSION_SEPARATOR) + VERSION_SEPARATOR.length());
+            VersionRange vr = new VersionRange(v, true);
+            if (vr.isPointVersion()) {
+                v = feature.substring(0, feature.indexOf(VERSION_SEPARATOR) + VERSION_SEPARATOR.length())
+                        + vr.getCeiling().toString();
+            }
+            featuresToDisplay.add(v);
         }
+        print("Adding features: " + join(featuresToDisplay), options.contains(Option.Verbose));
         Map<String, Map<String, FeatureState>> stateChanges = Collections.emptyMap();
         doProvisionInThread(required, stateChanges, state, options);
     }