You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gg...@apache.org on 2017/12/09 18:47:00 UTC

[karaf] 17/19: [KARAF-5376] Do not install blacklisted features and add blacklisted repositories

This is an automated email from the ASF dual-hosted git repository.

ggrzybek pushed a commit to branch KARAF-5376-overrides_v2
in repository https://gitbox.apache.org/repos/asf/karaf.git

commit fd8d0bbceb16a485d170ea1490c35c13befcac57
Author: Grzegorz Grzybek <gr...@gmail.com>
AuthorDate: Wed Dec 6 20:03:24 2017 +0100

    [KARAF-5376] Do not install blacklisted features and add blacklisted repositories
---
 .../karaf/features/command/RepoAddCommand.java     |  4 ++++
 .../completers/AvailableFeatureCompleter.java      |  2 +-
 .../org/apache/karaf/features/FeaturesService.java |  2 ++
 .../features/internal/service/FeatureReq.java      | 16 +++++++++++---
 .../internal/service/FeaturesServiceImpl.java      | 25 ++++++++++++++++++----
 5 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/features/command/src/main/java/org/apache/karaf/features/command/RepoAddCommand.java b/features/command/src/main/java/org/apache/karaf/features/command/RepoAddCommand.java
index 4771053..91ff430 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/RepoAddCommand.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/RepoAddCommand.java
@@ -46,6 +46,10 @@ public class RepoAddCommand extends FeaturesCommandSupport {
         if (uri == null) {
             uri = new URI(nameOrUrl);
         }
+        if (featuresService.isRepositoryUriBlacklisted(uri)) {
+            System.out.println("Feature URL " + uri + " is blacklisted");
+            return;
+        }
         System.out.println("Adding feature url " + uri);
         featuresService.addRepository(uri, install);
     }
diff --git a/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java b/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
index e0dc87a..bee4b6d 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/completers/AvailableFeatureCompleter.java
@@ -27,7 +27,7 @@ public class AvailableFeatureCompleter extends FeatureCompleterSupport {
 
     @Override
     protected boolean acceptsFeature(Feature feature) {
-        return !featuresService.isInstalled(feature) && !feature.isHidden();
+        return !featuresService.isInstalled(feature) && !feature.isHidden() && !feature.isBlacklisted();
     }
 
 }
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 e9cc072..9ff9cdb 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
@@ -120,6 +120,8 @@ public interface FeaturesService {
      */
     void validateRepository(URI uri) throws Exception;
 
+    boolean isRepositoryUriBlacklisted(URI uri);
+
     void addRepository(URI uri) throws Exception;
 
     void addRepository(URI uri, boolean install) throws Exception;
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 1a34f8b..696d2b7 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
@@ -52,6 +52,7 @@ public class FeatureReq {
 
     private String name;
     private VersionRange versionRange;
+    private boolean blacklisted = false;
 
     public static FeatureReq parseRequirement(String featureReq) {
         if (!featureReq.startsWith(FEATURE_OSGI_REQUIREMENT_PREFIX)) {
@@ -76,13 +77,14 @@ public class FeatureReq {
         this.versionRange = range(versionRange);
     }
     
-    public FeatureReq(String name, VersionRange versionRange) {
+    public FeatureReq(String name, VersionRange versionRange, boolean blacklisted) {
         this.name = name;
         this.versionRange = versionRange;
+        this.blacklisted = blacklisted;
     }
     
     public FeatureReq(Feature feature) {
-        this(feature.getName(), exactVersion(feature.getVersion()));
+        this(feature.getName(), exactVersion(feature.getVersion()), feature.isBlacklisted());
     }
     
     public String getName() {
@@ -119,7 +121,11 @@ public class FeatureReq {
             for (String available : versions.keySet()) {
                 Version availableVersion = VersionTable.getVersion(available);
                 if (availableVersion.compareTo(latest) >= 0 && versionRange.contains(availableVersion)) {
-                    feature = versions.get(available);
+                    Feature possiblyBlacklisted = versions.get(available);
+                    // return only if there are no more non-blaclisted features
+                    if (feature == null || !possiblyBlacklisted.isBlacklisted()) {
+                        feature = possiblyBlacklisted;
+                    }
                     latest = availableVersion;
                 }
             }
@@ -136,6 +142,10 @@ public class FeatureReq {
         return FEATURE_OSGI_REQUIREMENT_PREFIX + toString();
     }
 
+    public boolean isBlacklisted() {
+        return blacklisted;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
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 0302478..4f92c57 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
@@ -112,6 +112,7 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
     private final BundleInstallSupport installSupport;
     private final FeaturesServiceConfig cfg;
     private final RepositoryCache repositories;
+    private final FeaturesProcessor featuresProcessor;
 
     private final ThreadLocal<String> outputFile = new ThreadLocal<>();
 
@@ -150,7 +151,8 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
         this.resolver = resolver;
         this.installSupport = installSupport;
         this.globalRepository = globalRepository;
-        this.repositories = new RepositoryCacheImpl(new FeaturesProcessorImpl(cfg));
+        this.featuresProcessor = new FeaturesProcessorImpl(cfg);
+        this.repositories = new RepositoryCacheImpl(featuresProcessor);
         this.cfg = cfg;
         this.executor = Executors.newSingleThreadExecutor(ThreadUtils.namedThreadFactory("features"));
         loadState();
@@ -355,6 +357,11 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
     }
 
     @Override
+    public boolean isRepositoryUriBlacklisted(URI uri) {
+        return featuresProcessor.isRepositoryBlacklisted(uri.toString());
+    }
+
+    @Override
     public void addRepository(URI uri) throws Exception {
         addRepository(uri, false);
     }
@@ -776,9 +783,19 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
         Set<FeatureReq> existingFeatures = map(requirements, FeatureReq::parseRequirement);
 
         Set<FeatureReq> toAdd = computeFeaturesToAdd(options, toInstall);
-        toAdd.forEach(f -> requirements.add(f.toRequirement()));
-        print("Adding features: " + join(toAdd), options.contains(Option.Verbose));
-        
+        toAdd.forEach(f -> {
+            if (f.isBlacklisted()) {
+                print("Skipping blacklisted feature: " + f, options.contains(Option.Verbose));
+            } else {
+                requirements.add(f.toRequirement());
+            }
+        });
+        List<FeatureReq> notBlacklisted = toAdd.stream()
+                .filter(fr -> !fr.isBlacklisted()).collect(Collectors.toList());
+        if (notBlacklisted.size() > 0) {
+            print("Adding features: " + join(notBlacklisted), options.contains(Option.Verbose));
+        }
+
         if (options.contains(Option.Upgrade)) {
             Set<FeatureReq> toRemove = computeFeaturesToRemoveOnUpdate(toAdd, existingFeatures);
             toRemove.forEach(f -> requirements.remove(f.toRequirement()));

-- 
To stop receiving notification emails like this one, please contact
"commits@karaf.apache.org" <co...@karaf.apache.org>.