You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/03/05 13:20:28 UTC

svn commit: r1664323 - in /sling/trunk/tooling/support/provisioning-model/src: main/java/org/apache/sling/provisioning/model/ main/java/org/apache/sling/provisioning/model/io/ test/java/org/apache/sling/provisioning/model/ test/resources/merge/

Author: cziegeler
Date: Thu Mar  5 12:20:27 2015
New Revision: 1664323

URL: http://svn.apache.org/r1664323
Log:
SLING-4473 : Provide a way to remove settings, artifacts and features through a model
SLING-4475 : Artifact is twice in feature after merge

Added:
    sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java   (with props)
    sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/
    sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt   (with props)
    sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt   (with props)
    sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt   (with props)
    sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt   (with props)
Modified:
    sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/KeyValueMap.java
    sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelConstants.java
    sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java
    sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/io/ModelReader.java
    sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/package-info.java
    sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/U.java

Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/KeyValueMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/KeyValueMap.java?rev=1664323&r1=1664322&r2=1664323&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/KeyValueMap.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/KeyValueMap.java Thu Mar  5 12:20:27 2015
@@ -50,6 +50,16 @@ public class KeyValueMap<T>
     }
 
     /**
+     * Remove an item from the map
+     * @param key The key of the item.
+     * @return The previously stored value for the key or {@code null}.
+     * @since 1.1
+     */
+    public T remove(final String key) {
+        return this.properties.remove(key);
+    }
+
+    /**
      * Put all items from the other map in this map
      * @param map The other map
      */
@@ -74,4 +84,13 @@ public class KeyValueMap<T>
     public String toString() {
         return properties.toString();
     }
+
+    /**
+     * Get the size of the map.
+     * @return The size of the map.
+     * @since 1.1
+     */
+    public int size() {
+        return this.properties.size();
+    }
 }

Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelConstants.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelConstants.java?rev=1664323&r1=1664322&r2=1664323&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelConstants.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelConstants.java Thu Mar  5 12:20:27 2015
@@ -62,4 +62,10 @@ public abstract class ModelConstants {
 
     /** Default start level value */
     public static final int DEFAULT_START_LEVEL = 0;
+
+    /**
+     * Name of the run mode to remove things from the base model.
+     * @since 1.1
+     */
+    public static final String RUN_MODE_REMOVE = ":remove";
 }

Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java?rev=1664323&r1=1664322&r2=1664323&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/ModelUtility.java Thu Mar  5 12:20:27 2015
@@ -50,7 +50,62 @@ public abstract class ModelUtility {
 
             // run modes
             for(final RunMode runMode : feature.getRunModes()) {
-                final RunMode baseRunMode = baseFeature.getOrCreateRunMode(runMode.getNames());
+                // check for special remove run mode
+                String names[] = runMode.getNames();
+                if ( names != null ) {
+                    int removeIndex = -1;
+                    int index = 0;
+                    for(final String name : names) {
+                        if ( name.equals(ModelConstants.RUN_MODE_REMOVE) ) {
+                            removeIndex = index;
+                            break;
+                        }
+                        index++;
+                    }
+                    if ( removeIndex != -1 ) {
+                        String[] newNames = null;
+                        if ( names.length > 1 ) {
+                            newNames = new String[names.length - 1];
+                            index = 0;
+                            for(final String name : names) {
+                                if ( !name.equals(ModelConstants.RUN_MODE_REMOVE) ) {
+                                    newNames[index++] = name;
+                                }
+                            }
+                        }
+                        names = newNames;
+                        final RunMode baseRunMode = baseFeature.getRunMode(names);
+                        if ( baseRunMode != null ) {
+
+                            // artifact groups
+                            for(final ArtifactGroup group : runMode.getArtifactGroups()) {
+                                for(final Artifact artifact : group) {
+                                    for(final ArtifactGroup searchGroup : baseRunMode.getArtifactGroups()) {
+                                        final Artifact found = searchGroup.search(artifact);
+                                        if ( found != null ) {
+                                            searchGroup.remove(found);
+                                        }
+                                    }
+                                }
+                            }
+
+                            // configurations
+                            for(final Configuration config : runMode.getConfigurations()) {
+                                final Configuration found = baseRunMode.getConfiguration(config.getPid(), config.getFactoryPid());
+                                if ( found != null ) {
+                                    baseRunMode.getConfigurations().remove(found);
+                                }
+                            }
+
+                            // settings
+                            for(final Map.Entry<String, String> entry : runMode.getSettings() ) {
+                                baseRunMode.getSettings().remove(entry.getKey());
+                            }
+                        }
+                        continue;
+                    }
+                }
+                final RunMode baseRunMode = baseFeature.getOrCreateRunMode(names);
 
                 // artifact groups
                 for(final ArtifactGroup group : runMode.getArtifactGroups()) {
@@ -58,7 +113,7 @@ public abstract class ModelUtility {
 
                     for(final Artifact artifact : group) {
                         for(final ArtifactGroup searchGroup : baseRunMode.getArtifactGroups()) {
-                            final Artifact found = baseGroup.search(artifact);
+                            final Artifact found = searchGroup.search(artifact);
                             if ( found != null ) {
                                 searchGroup.remove(found);
                             }

Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/io/ModelReader.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/io/ModelReader.java?rev=1664323&r1=1664322&r2=1664323&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/io/ModelReader.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/io/ModelReader.java Thu Mar  5 12:20:27 2015
@@ -256,7 +256,6 @@ public class ModelReader {
                                           if ( factoryPos == -1 ) {
                                               pid = configId;
                                               factoryPid = null;
-                                              config = new Configuration(configId, null);
                                           } else {
                                               pid = configId.substring(factoryPos + 1);
                                               factoryPid = configId.substring(0, factoryPos);

Modified: sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/package-info.java?rev=1664323&r1=1664322&r2=1664323&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/package-info.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/main/java/org/apache/sling/provisioning/model/package-info.java Thu Mar  5 12:20:27 2015
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("1.0")
+@Version("1.1.0")
 package org.apache.sling.provisioning.model;
 
 import aQute.bnd.annotation.Version;

Added: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java?rev=1664323&view=auto
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java (added)
+++ sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java Thu Mar  5 12:20:27 2015
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+package org.apache.sling.provisioning.model;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.junit.Test;
+
+public class ModelUtilityTest {
+
+    @Test public void mergeArtifactsTest() throws Exception {
+        final Model model = U.readCompleteTestModel(new String[] {"merge/artifact-base.txt",
+                                                                 "merge/artifact-merge.txt"});
+
+        // model should now have one artifact
+        assertNotNull(model.getFeature("f"));
+        assertNotNull(model.getFeature("f").getRunMode());
+        assertNotNull(model.getFeature("f").getRunMode().getArtifactGroup(3));
+        assertNotNull(model.getFeature("f").getRunMode().getArtifactGroup(5));
+        U.assertArtifactsInGroup(model.getFeature("f").getRunMode().getArtifactGroup(5), 0);
+        final List<Artifact> list = U.assertArtifactsInGroup(model.getFeature("f").getRunMode().getArtifactGroup(3), 1);
+
+        U.assertArtifact(list.get(0), "g", "a", "2.0.0", "jar", null);
+    }
+
+    @Test public void removeTest() throws Exception {
+        final Model model = U.readCompleteTestModel(new String[] {"merge/remove-base.txt",
+                                                   "merge/remove-merge.txt"});
+
+        assertNotNull(model.getFeature("f"));
+        assertNotNull(model.getFeature("f").getRunMode());
+        assertNotNull(model.getFeature("f").getRunMode().getArtifactGroup(5));
+        assertNotNull(model.getFeature("f").getRunMode().getArtifactGroup(7));
+
+        final List<Artifact> group5 = U.assertArtifactsInGroup(model.getFeature("f").getRunMode().getArtifactGroup(5), 1);
+        U.assertArtifact(group5.get(0), "g", "a", "1.0.0", "jar", null);
+
+        final List<Artifact> group7 = U.assertArtifactsInGroup(model.getFeature("f").getRunMode().getArtifactGroup(7), 1);
+        U.assertArtifact(group7.get(0), "g", "c", "1.0.0", "jar", null);
+
+        final List<Configuration> cfgs = U.assertConfigurationsInRunMode(model.getFeature("f").getRunMode(), 2);
+        assertEquals("org.sling.service.A", cfgs.get(0).getPid());
+        assertEquals("org.sling.service.C", cfgs.get(1).getPid());
+
+        assertEquals(2, model.getFeature("f").getRunMode().getSettings().size());
+        assertEquals("a", model.getFeature("f").getRunMode().getSettings().get("key.a"));
+        assertEquals("c", model.getFeature("f").getRunMode().getSettings().get("key.c"));
+    }
+}

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision rev url

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/ModelUtilityTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/U.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/U.java?rev=1664323&r1=1664322&r2=1664323&view=diff
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/U.java (original)
+++ sling/trunk/tooling/support/provisioning-model/src/test/java/org/apache/sling/provisioning/model/U.java Thu Mar  5 12:20:27 2015
@@ -18,33 +18,43 @@ package org.apache.sling.provisioning.mo
 
 import static org.apache.sling.provisioning.model.ModelConstants.DEFAULT_RUN_MODE;
 import static org.apache.sling.provisioning.model.ModelConstants.DEFAULT_START_LEVEL;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.sling.provisioning.model.io.ModelReader;
 
 /** Test utilities */
 public class U {
-    
-    public static final String[] TEST_MODEL_FILENAMES = 
+
+    public static final String[] TEST_MODEL_FILENAMES =
             new String[] {"boot.txt", "example.txt", "main.txt", "oak.txt"};
-    
+
     public static void assertArtifact(ArtifactGroup g, String mvnUrl) {
         final Artifact a = Artifact.fromMvnUrl(mvnUrl);
         if(!g.items.contains(a)) {
             fail("Expecting ArtifactGroup to contain '" + mvnUrl + "': " + g);
         }
     }
-    
-    /** Read our test model by merging our TEST_MODEL_FILENAMES */ 
+
+    /** Read our test model by merging our TEST_MODEL_FILENAMES */
     public static Model readCompleteTestModel() throws Exception {
+        return readCompleteTestModel(TEST_MODEL_FILENAMES);
+    }
+
+    /** Read the complete model from that names */
+    public static Model readCompleteTestModel(final String[] names) throws Exception {
         final Model result = new Model();
 
-        for(final String name : TEST_MODEL_FILENAMES) {
+        for(final String name : names) {
             final Reader reader = new InputStreamReader(U.class.getResourceAsStream("/" + name), "UTF-8");
             try {
                 final Model current = ModelReader.read(reader, name);
@@ -64,7 +74,7 @@ public class U {
         }
         return result;
     }
-    
+
     public static ArtifactGroup getGroup(Model m, String feature, String runMode, int startLevel) {
         final Feature f = m.getFeature(feature);
         assertNotNull(f);
@@ -74,7 +84,7 @@ public class U {
         assertNotNull(g);
         return g;
     }
-    
+
     /** Verify that m matches what we expect after
      *  reading and merging our test files.
      */
@@ -83,13 +93,13 @@ public class U {
         for(String name : f) {
             assertNotNull("Expecting feature to be present:" + name, m.getFeature(name));
         }
-        
+
         {
             final ArtifactGroup g = getGroup(m, "example", DEFAULT_RUN_MODE, DEFAULT_START_LEVEL);
             U.assertArtifact(g, "mvn:commons-collections/commons-collections/3.2.1/jar");
             U.assertArtifact(g, "mvn:org.example/jar-is-default/1.2/jar");
         }
-        
+
         {
             final ArtifactGroup g = getGroup(m, "example", "jackrabbit", 15);
             if(variablesAlreadyResolved) {
@@ -98,7 +108,7 @@ public class U {
                 U.assertArtifact(g, "mvn:org.apache.sling/org.apache.sling.jcr.jackrabbit.server/${jackrabbit.version}/jar");
             }
         }
-        
+
         {
             final ArtifactGroup g = getGroup(m, ":boot", DEFAULT_RUN_MODE, DEFAULT_START_LEVEL);
             if(variablesAlreadyResolved) {
@@ -107,7 +117,43 @@ public class U {
                 U.assertArtifact(g, "mvn:org.apache.sling/org.apache.sling.fragment.ws/${ws.version}/jar");
             }
         }
-        
+    }
 
+    public static void assertArtifact(final Artifact artifact,
+            final String groupId, final String artifactId, final String version, final String type, final String classifier) {
+        assertNotNull(artifact);
+        assertEquals(groupId, artifact.getGroupId());
+        assertEquals(artifactId, artifact.getArtifactId());
+        assertEquals(version, artifact.getVersion());
+        assertEquals(type, artifact.getType());
+        assertEquals(classifier, artifact.getClassifier());
+    }
+
+    public static List<Artifact> assertArtifactsInGroup(final ArtifactGroup group, final int size) {
+        final List<Artifact> result = new ArrayList<Artifact>();
+        if ( size == 0 ) {
+            assertTrue("Group should be empty", group.isEmpty());
+        } else {
+            assertFalse("Group should not be empty", group.isEmpty());
+        }
+        for(final Artifact a : group) {
+            result.add(a);
+        }
+        assertEquals("Unexpected size of group: ", size, result.size());
+        return result;
+    }
+
+    public static List<Configuration> assertConfigurationsInRunMode(final RunMode runmode, final int size) {
+        final List<Configuration> result = new ArrayList<Configuration>();
+        if ( size == 0 ) {
+            assertTrue("Configurations should be empty", runmode.getConfigurations().isEmpty());
+        } else {
+            assertFalse("Configurations should not be empty", runmode.getConfigurations().isEmpty());
+        }
+        for(final Configuration a : runmode.getConfigurations()) {
+            result.add(a);
+        }
+        assertEquals("Unexpected size of configurations: ", size, result.size());
+        return result;
     }
 }

Added: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt?rev=1664323&view=auto
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt (added)
+++ sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt Thu Mar  5 12:20:27 2015
@@ -0,0 +1,4 @@
+[feature name=f]
+
+[artifacts startLevel=5]
+ g/a/1.0.0
\ No newline at end of file

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-base.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt?rev=1664323&view=auto
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt (added)
+++ sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt Thu Mar  5 12:20:27 2015
@@ -0,0 +1,4 @@
+[feature name=f]
+
+[artifacts startLevel=3]
+ g/a/2.0.0
\ No newline at end of file

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/artifact-merge.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt?rev=1664323&view=auto
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt (added)
+++ sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt Thu Mar  5 12:20:27 2015
@@ -0,0 +1,25 @@
+[feature name=f]
+
+[artifacts startLevel=5]
+ g/a/1.0.0
+ g/b/1.0.0
+
+[artifacts startLevel=7]
+ g/c/1.0.0
+ g/d/1.0.0
+ 
+[configurations]
+  org.sling.service.A
+    name="A"
+
+  org.sling.service.B
+    name="B"
+
+  org.sling.service.C
+    name="C"
+
+[settings]
+    key.a=a
+    key.b=b
+    key.c=c
+ 
\ No newline at end of file

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-base.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt?rev=1664323&view=auto
==============================================================================
--- sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt (added)
+++ sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt Thu Mar  5 12:20:27 2015
@@ -0,0 +1,12 @@
+[feature name=f]
+
+[artifacts runModes=:remove]
+ g/b/2.0.0
+ g/d/1.0.0
+ 
+[configurations runModes=:remove]
+  org.sling.service.B
+
+[settings runModes=:remove]
+  key.b=remove
+ 
\ No newline at end of file

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: sling/trunk/tooling/support/provisioning-model/src/test/resources/merge/remove-merge.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain