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 2016/11/03 14:32:12 UTC
karaf git commit: [KARAF-4060] Throw an error when we remove a repo
containing installed features
Repository: karaf
Updated Branches:
refs/heads/master c50929336 -> bc22e0b3b
[KARAF-4060] Throw an error when we remove a repo containing installed features
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/bc22e0b3
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/bc22e0b3
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/bc22e0b3
Branch: refs/heads/master
Commit: bc22e0b3bed48a665f559a9ea5dd04914fbcb0b8
Parents: c509293
Author: Guillaume Nodet <gn...@apache.org>
Authored: Thu Nov 3 15:31:29 2016 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Thu Nov 3 15:31:29 2016 +0100
----------------------------------------------------------------------
.../internal/service/FeaturesServiceImpl.java | 34 ++++++++++++--------
1 file changed, 21 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/bc22e0b3/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 090112f..aa4050d 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
@@ -473,8 +473,27 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
@Override
public void removeRepository(URI uri, boolean uninstall) throws Exception {
- // TODO: check we don't have any feature installed from this repository
- Repository repo;
+ Repository repo = getRepository(uri);
+ if (repo == null) {
+ return;
+ }
+
+ Set<String> features = new HashSet<>();
+ synchronized (lock) {
+ for (Feature feature : repo.getFeatures()) {
+ if (isRequired(feature)) {
+ features.add(feature.getId());
+ }
+ }
+ }
+ if (!features.isEmpty()) {
+ if (uninstall) {
+ uninstallFeatures(features, EnumSet.noneOf(Option.class));
+ } else {
+ throw new IllegalStateException("The following features are required from the repository: " + String.join(", ", features));
+ }
+ }
+
synchronized (lock) {
// Remove repo
if (!state.repositories.remove(uri.toString())) {
@@ -495,18 +514,7 @@ public class FeaturesServiceImpl implements FeaturesService, Deployer.DeployCall
}
saveState();
}
- if (repo == null) {
- repo = new RepositoryImpl(uri, blacklisted);
- }
callListeners(new RepositoryEvent(repo, RepositoryEvent.EventType.RepositoryRemoved, false));
- // uninstall the features from the repository
- if (uninstall) {
- HashSet<String> features = new HashSet<>();
- for (Feature feature : repo.getFeatures()) {
- features.add(feature.getName() + "/" + feature.getVersion());
- }
- uninstallFeatures(features, EnumSet.noneOf(FeaturesService.Option.class));
- }
}
@Override