SLING-7920 - support multiple repoinit sections in a single provmodel feature
diff --git a/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java b/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java
index f53236a..75a5887 100644
--- a/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java
+++ b/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java
@@ -410,42 +410,46 @@
                 }
             }
         }
-        Extension repoExtension = extensions.getByName(FeatureConstants.EXTENSION_NAME_REPOINIT);
-        for(final Section sect : feature.getAdditionalSections("repoinit")) {
-            String text = sect.getContents();
-            if ( repoExtension == null ) {
-//                repoExtension = new Extension(ExtensionType.TEXT, Extension.NAME_REPOINIT, true);
-//                extensions.add(repoExtension);
-//                repoExtension.setJSON(text);
 
+        final StringBuilder repoinitText = new StringBuilder();
+        for(final Section sect : feature.getAdditionalSections("repoinit")) {
+            repoinitText.append(sect.getContents()).append("\n");
+        }
+
+        if(repoinitText.length() > 0) {
+            Extension repoExtension = extensions.getByName(FeatureConstants.EXTENSION_NAME_REPOINIT);
+
+            if ( repoExtension == null ) {
                 repoExtension = new Extension(ExtensionType.JSON, FeatureConstants.EXTENSION_NAME_REPOINIT, true);
                 extensions.add(repoExtension);
-                text = text.replace('\t', ' ');
-                String[] lines = text.split("[\n]");
-
-                StringBuilder sb = new StringBuilder();
-                sb.append('[');
-
-                boolean first = true;
-                for (String t : lines) {
-                    if (first)
-                        first = false;
-                    else
-                        sb.append(',');
-
-                    sb.append('"');
-                    sb.append(t);
-                    sb.append('"');
-                }
-                sb.append(']');
-
-                repoExtension.setJSON(sb.toString());
+                repoExtension.setJSON(textToJSON(repoinitText.toString()));
             } else {
-                repoExtension.setText(repoExtension.getText() + "\n\n" + text);
+                throw new IllegalStateException("Repoinit sections already processed");
             }
         }
-    }
+}
 
+    private static String textToJSON(String text) {
+        text = text.replace('\t', ' ');
+        String[] lines = text.split("[\n]");
+
+        StringBuilder sb = new StringBuilder();
+        sb.append('[');
+
+        boolean first = true;
+        for (String t : lines) {
+            if (first)
+                first = false;
+            else
+                sb.append(',');
+
+            sb.append('"');
+            sb.append(t);
+            sb.append('"');
+        }
+        sb.append(']');
+        return sb.toString();
+    }
 
     private static List<org.apache.sling.feature.Feature> buildFeatures(Model model, String bareFileName, Map<String, Object> options) {
         final List<org.apache.sling.feature.Feature> features = new ArrayList<>();
diff --git a/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java b/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
index f70d4fa..9f042fd 100644
--- a/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
@@ -319,6 +319,11 @@
                 orgLines, owLines);
     }
 
+    @Test
+    public void testMultipleRepoinitSections() throws Exception {
+        testConvertToFeature("/more/repoinit-multiple.txt", "/more/repoinit-multiple.json");
+    }
+
     public void testConvertFromProvModelRoundTrip(File orgProvModel) throws Exception {
         System.out.println("*** Roundtrip converting: " + orgProvModel.getName());
         List<File> allGenerateProvisioningModelFiles = new ArrayList<>();
diff --git a/src/test/resources/more/repoinit-multiple.json b/src/test/resources/more/repoinit-multiple.json
new file mode 100644
index 0000000..9a97bc4
--- /dev/null
+++ b/src/test/resources/more/repoinit-multiple.json
@@ -0,0 +1,10 @@
+{
+    "#": "this is a comment",
+
+    "id": "generated/repoinit-multiple/1.0.0",
+    "repoinit:JSON|true": [
+        "create service user one",
+        "create service user two",
+        "create service user three"
+    ]
+}
diff --git a/src/test/resources/more/repoinit-multiple.txt b/src/test/resources/more/repoinit-multiple.txt
new file mode 100644
index 0000000..25b4af4
--- /dev/null
+++ b/src/test/resources/more/repoinit-multiple.txt
@@ -0,0 +1,28 @@
+#
+#  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.
+#
+[feature name=repoinit-multiple]
+
+[:repoinit]
+    create service user one
+
+[:repoinit]
+    create service user two
+
+[:repoinit]
+    create service user three        
\ No newline at end of file