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 2014/03/21 13:55:16 UTC

[1/3] git commit: [KARAF-2841] FeaturesService#listInstalledFeatures() should not return conditional features

Repository: karaf
Updated Branches:
  refs/heads/master ebe7b06a6 -> f14efe123


[KARAF-2841] FeaturesService#listInstalledFeatures() should not return conditional features


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

Branch: refs/heads/master
Commit: f14efe123e3ec18af587f374cb77579d20bfca15
Parents: 7aefb62
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Mar 21 13:54:36 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Mar 21 13:54:57 2014 +0100

----------------------------------------------------------------------
 .../apache/karaf/features/FeaturesService.java  |  2 +-
 .../internal/BootFeaturesInstaller.java         |  8 +++---
 .../features/internal/FeaturesServiceImpl.java  | 29 ++++++++++++++------
 .../apache/karaf/itests/KarafTestSupport.java   |  4 +--
 4 files changed, 27 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/f14efe12/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java b/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java
index 9e9b08f..2a1a3fa 100644
--- a/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java
+++ b/features/core/src/main/java/org/apache/karaf/features/FeaturesService.java
@@ -77,7 +77,7 @@ public interface FeaturesService {
 
     Feature[] listFeatures() throws Exception;
 
-    Feature[] listInstalledFeatures();
+    Feature[] listInstalledFeatures() throws Exception;
 
     boolean isInstalled(Feature f);
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/f14efe12/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java b/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java
index 8fed435..f32d2ea 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java
@@ -82,11 +82,11 @@ public class BootFeaturesInstaller {
     }
     
 	void installBootFeatures() {
-	    List<Feature> installedFeatures = Arrays.asList(featuresService.listInstalledFeatures());
-		List<Set<String>> stagedFeatureNames = parseBootFeatures(boot);
-        List<Set<Feature>> stagedFeatures = toFeatureSetList(stagedFeatureNames);
-
         try {
+            List<Feature> installedFeatures = Arrays.asList(featuresService.listInstalledFeatures());
+            List<Set<String>> stagedFeatureNames = parseBootFeatures(boot);
+            List<Set<Feature>> stagedFeatures = toFeatureSetList(stagedFeatureNames);
+
             for (Set<Feature> features : stagedFeatures) {
                 features.removeAll(installedFeatures);
                 featuresService.installFeatures(features, EnumSet.of(Option.NoCleanIfFailure, Option.ContinueBatchOnFailure));                

http://git-wip-us.apache.org/repos/asf/karaf/blob/f14efe12/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
index a938f42..17c91ba 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
@@ -137,11 +137,15 @@ public class FeaturesServiceImpl implements FeaturesService {
 
     public void registerListener(FeaturesListener listener) {
         listeners.add(listener);
-        for (Repository repository : listRepositories()) {
-            listener.repositoryEvent(new RepositoryEvent(repository, RepositoryEvent.EventType.RepositoryAdded, true));
-        }
-        for (Feature feature : listInstalledFeatures()) {
-            listener.featureEvent(new FeatureEvent(feature, FeatureEvent.EventType.FeatureInstalled, true));
+        try {
+            for (Repository repository : listRepositories()) {
+                listener.repositoryEvent(new RepositoryEvent(repository, RepositoryEvent.EventType.RepositoryAdded, true));
+            }
+            for (Feature feature : listInstalledFeatures()) {
+                listener.featureEvent(new FeatureEvent(feature, FeatureEvent.EventType.FeatureInstalled, true));
+            }
+        } catch (Exception e) {
+            LOGGER.error("Error notifying listener about the current state", e);
         }
     }
 
@@ -747,7 +751,7 @@ public class FeaturesServiceImpl implements FeaturesService {
     }
 
     public Feature[] listFeatures() throws Exception {
-        Collection<Feature> features = new ArrayList<Feature>();
+        Set<Feature> features = new HashSet<Feature>();
         for (Map<String, Feature> featureWithDifferentVersion : getFeatures().values()) {
 			for (Feature f : featureWithDifferentVersion.values()) {
                 features.add(f);
@@ -756,9 +760,16 @@ public class FeaturesServiceImpl implements FeaturesService {
         return features.toArray(new Feature[features.size()]);
     }
 
-    public Feature[] listInstalledFeatures() {
-        Set<Feature> result = installed.keySet();
-        return result.toArray(new Feature[result.size()]);
+    public Feature[] listInstalledFeatures() throws Exception {
+        Set<Feature> features = new HashSet<Feature>();
+        for (Map<String, Feature> featureWithDifferentVersion : getFeatures().values()) {
+            for (Feature f : featureWithDifferentVersion.values()) {
+                if (installed.containsKey(f)) {
+                    features.add(f);
+                }
+            }
+        }
+        return features.toArray(new Feature[features.size()]);
     }
 
     public boolean isInstalled(Feature f) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/f14efe12/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
index 4507d5f..7fa2146 100644
--- a/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
+++ b/itests/src/test/java/org/apache/karaf/itests/KarafTestSupport.java
@@ -342,7 +342,7 @@ public class KarafTestSupport {
         return connector;
     }
 
-    public void assertFeatureInstalled(String featureName) {
+    public void assertFeatureInstalled(String featureName) throws Exception {
         Feature[] features = featureService.listInstalledFeatures();
         for (Feature feature : features) {
             if (featureName.equals(feature.getName())) {
@@ -352,7 +352,7 @@ public class KarafTestSupport {
         Assert.fail("Feature " + featureName + " should be installed but is not");
     }
 
-    public void assertFeaturesInstalled(String ... expectedFeatures) {
+    public void assertFeaturesInstalled(String ... expectedFeatures) throws Exception {
         Set<String> expectedFeaturesSet = new HashSet<String>(Arrays.asList(expectedFeatures));
         Feature[] features = featureService.listInstalledFeatures();
         Set<String> installedFeatures = new HashSet<String>();


[2/3] git commit: [KARAF-2839] Conditional features are not verified correctly after installing / uninstalling a feature

Posted by gn...@apache.org.
[KARAF-2839] Conditional features are not verified correctly after installing / uninstalling a feature


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

Branch: refs/heads/master
Commit: 7aefb628090b98f913f225a32e3b4985eefffe22
Parents: 5ad2bf1
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Mar 21 13:53:46 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Mar 21 13:54:57 2014 +0100

----------------------------------------------------------------------
 .../features/internal/FeaturesServiceImpl.java  | 69 ++++++++++++++------
 .../karaf/itests/ConditionalFeaturesTest.java   |  4 ++
 2 files changed, 52 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/7aefb628/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
index be37db6..a938f42 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
@@ -401,20 +401,14 @@ public class FeaturesServiceImpl implements FeaturesService {
             	try {
                     doInstallFeature(s, f, verbose);
                     doInstallFeatureConditionals(s, f, verbose);
-                    state.bundleInfos.putAll(s.bundleInfos);
-                    state.bundles.addAll(s.bundles);
-                    state.features.putAll(s.features);
-                    state.installed.addAll(s.installed);
-                    state.bundleStartLevels.putAll(s.bundleStartLevels);
-
                     //Check if current feature satisfies the conditionals of existing features
                     for (Feature installedFeature : listInstalledFeatures()) {
-                        for (Conditional conditional : installedFeature.getConditional()) {
-                            if (dependenciesSatisfied(conditional.getCondition(), state)) {
-                                doInstallFeatureConditionals(s, installedFeature, verbose);
-                            }
-                        }
+                        doInstallFeatureConditionals(s, installedFeature, verbose);
+                    }
+                    for (Feature installedFeature : state.features.keySet()) {
+                        doInstallFeatureConditionals(s, installedFeature, verbose);
                     }
+
                     state.bundleInfos.putAll(s.bundleInfos);
                     state.bundles.addAll(s.bundles);
                     state.features.putAll(s.features);
@@ -568,16 +562,19 @@ public class FeaturesServiceImpl implements FeaturesService {
 
     protected void doInstallFeatureConditionals(InstallationState state, Feature feature,  boolean verbose) throws Exception {
         //Check conditions of the current feature.
-        for (Conditional conditional : feature.getConditional()) {
+        feature = getFeature(feature.getName(), feature.getVersion());
+        if (feature != null) {
+            for (Conditional conditional : feature.getConditional()) {
 
-            if (dependenciesSatisfied(conditional.getCondition(), state)) {
-                InstallationState s = new InstallationState();
-                doInstallFeature(s, conditional.asFeature(feature.getName(), feature.getVersion()), verbose);
-                state.bundleInfos.putAll(s.bundleInfos);
-                state.bundles.addAll(s.bundles);
-                state.features.putAll(s.features);
-                state.installed.addAll(s.installed);
-                state.bundleStartLevels.putAll(s.bundleStartLevels);
+                if (dependenciesSatisfied(conditional.getCondition(), state)) {
+                    InstallationState s = new InstallationState();
+                    doInstallFeature(s, conditional.asFeature(feature.getName(), feature.getVersion()), verbose);
+                    state.bundleInfos.putAll(s.bundleInfos);
+                    state.bundles.addAll(s.bundles);
+                    state.features.putAll(s.features);
+                    state.installed.addAll(s.installed);
+                    state.bundleStartLevels.putAll(s.bundleStartLevels);
+                }
             }
         }
     }
@@ -675,8 +672,10 @@ public class FeaturesServiceImpl implements FeaturesService {
         }
         boolean verbose = options != null && options.contains(Option.Verbose);
         boolean refresh = options == null || !options.contains(Option.NoAutoRefreshBundles);
+        String msg = "Uninstalling feature " + feature.getName() + " " + feature.getVersion();
+        LOGGER.info(msg);
         if (verbose) {
-            System.out.println("Uninstalling feature " + feature.getName() + " " + feature.getVersion());
+            System.out.println(msg);
         }
         // Grab all the bundles installed by this feature
         // and remove all those who will still be in use.
@@ -687,11 +686,39 @@ public class FeaturesServiceImpl implements FeaturesService {
         for (Conditional conditional : feature.getConditional()) {
             Feature conditionalFeature = conditional.asFeature(feature.getName(),feature.getVersion());
             if (installed.containsKey(conditionalFeature)) {
+                msg = "Uninstalling feature " + conditionalFeature.getName() + " " + conditionalFeature.getVersion();
+                LOGGER.info(msg);
+                if (verbose) {
+                    System.out.println(msg);
+                }
             	bundles.addAll(installed.remove(conditionalFeature));
             } else {
             	LOGGER.info("Conditional feature {}, hasn't been installed!");
             }
         }
+        for (Feature f : new HashSet<Feature>(installed.keySet())) {
+            f = getFeature(f.getName(), f.getVersion());
+            if (f != null) {
+                for (Conditional conditional : f.getConditional()) {
+                    boolean satisfied = true;
+                    for (Dependency dep : conditional.getCondition()) {
+                        Feature df = getFeatureForDependency(dep);
+                        satisfied &= installed.containsKey(df);
+                    }
+                    if (!satisfied) {
+                        Feature conditionalFeature = conditional.asFeature(f.getName(), f.getVersion());
+                        if (installed.containsKey(conditionalFeature)) {
+                            msg = "Uninstalling feature " + conditionalFeature.getName() + " " + conditionalFeature.getVersion();
+                            LOGGER.info(msg);
+                            if (verbose) {
+                                System.out.println(msg);
+                            }
+                            bundles.addAll(installed.remove(conditionalFeature));
+                        }
+                    }
+                }
+            }
+        }
 
         for (Set<Long> b : installed.values()) {
             bundles.removeAll(b);

http://git-wip-us.apache.org/repos/asf/karaf/blob/7aefb628/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java b/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
index b747518..46908d1 100644
--- a/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
+++ b/itests/src/test/java/org/apache/karaf/itests/ConditionalFeaturesTest.java
@@ -89,5 +89,9 @@ public class ConditionalFeaturesTest extends KarafTestSupport {
           //ignore as the eventadmin activator might throw an error.
         }
         assertBundleInstalled("org.apache.felix.webconsole.plugins.event");
+
+        //Remove eventadmin
+        featureService.uninstallFeature("eventadmin");
+        assertBundleNotInstalled("org.apache.felix.webconsole.plugins.event");
     }
 }


[3/3] git commit: Speed up build by disabling OBR update of ~/.m2/repository/repository.xml

Posted by gn...@apache.org.
Speed up build by disabling OBR update of ~/.m2/repository/repository.xml


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

Branch: refs/heads/master
Commit: 5ad2bf11328c6ffabb67e954ac4ffe97e66fb951
Parents: ebe7b06
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Mar 21 11:02:41 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Mar 21 13:54:57 2014 +0100

----------------------------------------------------------------------
 pom.xml | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/5ad2bf11/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 072281a..132768b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -258,6 +258,8 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <appendedResourcesDirectory>${basedir}/etc/appended-resources</appendedResourcesDirectory>
         <bnd.version.policy>[$(version;==;$(@)),$(version;+;$(@)))</bnd.version.policy>
+        <!-- Disable OBR repository update by default -->
+        <obrRepository>NONE</obrRepository>
     </properties>
 
     <repositories>