SLING-8555 - Converter generates broken repoinit statements when package
contains type indicators for restriction
type indicators filtered out via regex
added the RepoInitParser in the tests
diff --git a/pom.xml b/pom.xml
index 660d07e..bc50bb7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -216,6 +216,12 @@
<version>2.25.0</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.repoinit.parser</artifactId>
+ <version>1.2.4</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
index f377ca1..877fe37 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
@@ -24,6 +24,7 @@
import java.util.Map;
import java.util.Stack;
import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -84,6 +85,8 @@
operations.put(REP_DENY_ACE, "deny");
}
+ private static final Pattern typeIndicatorPattern = Pattern.compile("\\{[^\\}]+\\}\\[(.+)\\]");
+
private final Stack<Acl> acls = new Stack<>();
private final String path;
@@ -109,9 +112,10 @@
String operation = operations.get(primaryType);
String privileges = attributes.getValue(REP_PRIVILEGES);
- int beginIndex = privileges.indexOf('[') + 1;
- int endIndex = privileges.indexOf(']');
- privileges = privileges.substring(beginIndex, endIndex);
+ Matcher matcher = typeIndicatorPattern.matcher(privileges);
+ if (matcher.matches()) {
+ privileges = matcher.group(1);
+ }
Acl acl = new Acl(operation, privileges, Paths.get(path));
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
index e39c660..5f8f27c 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
@@ -16,18 +16,20 @@
*/
package org.apache.sling.feature.cpconverter.handlers;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import java.io.File;
+import java.io.StringReader;
import java.nio.file.Paths;
+import java.util.List;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -41,6 +43,9 @@
import org.apache.sling.feature.cpconverter.features.DefaultFeaturesManager;
import org.apache.sling.feature.cpconverter.features.FeaturesManager;
import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
+import org.apache.sling.repoinit.parser.RepoInitParser;
+import org.apache.sling.repoinit.parser.impl.RepoInitParserService;
+import org.apache.sling.repoinit.parser.operations.Operation;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -114,6 +119,10 @@
"end\n";
String actual = repoinitExtension.getText();
assertEquals(expected, actual);
+
+ RepoInitParser repoInitParser = new RepoInitParserService();
+ List<Operation> operations = repoInitParser.parse(new StringReader(actual));
+ assertFalse(operations.isEmpty());
}
@Test
@@ -145,6 +154,10 @@
"end\n";
String actual = repoinitExtension.getText();
assertEquals(expected, actual);
+
+ RepoInitParser repoInitParser = new RepoInitParserService();
+ List<Operation> operations = repoInitParser.parse(new StringReader(actual));
+ assertFalse(operations.isEmpty());
}
@Test