Merge branch 'master' into avoid_subpackages_flattering
# Conflicts:
# src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
# src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
# src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
# src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
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/acl/DefaultAclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
index c6a8819..0c9fd5d 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/acl/DefaultAclManager.java
@@ -110,7 +110,7 @@
// make sure all users are created first
- formatter.format("create service user %s with path /home/users/system/%s%n", systemUser.getId(), systemUser.getPath().getFileName());
+ formatter.format("create service user %s with path %s%n", systemUser.getId(), systemUser.getPath());
// create then the paths
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/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java
index 1188c01..f5f0dc0 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandler.java
@@ -19,6 +19,7 @@
import java.io.InputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.regex.Matcher;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -30,13 +31,20 @@
public final class SystemUsersEntryHandler extends AbstractRegexEntryHandler {
public SystemUsersEntryHandler() {
- super("/jcr_root/home/users/.*/\\.content.xml");
+ super("/jcr_root(/home/users/.*/)\\.content.xml");
}
@Override
public void handle(String path, Archive archive, Entry entry, ContentPackage2FeatureModelConverter converter)
throws Exception {
- SystemUserParser systemUserParser = new SystemUserParser(converter, Paths.get(path).getParent());
+ Matcher matcher = getPattern().matcher(path);
+ if (matcher.matches()) {
+ path = matcher.group(1);
+ }
+
+ Path currentPath = Paths.get(path).getParent();
+
+ SystemUserParser systemUserParser = new SystemUserParser(converter, currentPath);
try (InputStream input = archive.openInputStream(entry)) {
systemUserParser.parse(input);
}
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
index 8dc0a08..b70baed 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/acl/AclManagerTest.java
@@ -17,19 +17,25 @@
package org.apache.sling.feature.cpconverter.acl;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.File;
+import java.io.StringReader;
import java.nio.file.Paths;
import java.util.Arrays;
+import java.util.List;
import org.apache.sling.feature.ArtifactId;
import org.apache.sling.feature.Extension;
import org.apache.sling.feature.Feature;
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;
@@ -49,7 +55,7 @@
}
@Test
- public void makeSureAclsAreCreatedOnlyForKnownUsers() {
+ public void makeSureAclsAreCreatedOnlyForKnownUsers() throws Exception {
aclManager.addSystemUser(new SystemUser("acs-commons-ensure-oak-index-service", Paths.get("/asd/public")));
// emulate a second iteration of conversion
@@ -73,9 +79,9 @@
assertNotNull(repoinitExtension);
// acs-commons-on-deploy-scripts-service will be missed
- String expected = "create service user acs-commons-package-replication-status-event-service with path /home/users/system/public\n" +
+ String expected = "create service user acs-commons-package-replication-status-event-service with path /asd/public\n" +
"create path (sling:Folder) /asd\n" +
- "create path (sling:Folder) /asd/public\n" +
+ "create path (sling:Folder) /asd/public\n" +
"set ACL for acs-commons-package-replication-status-event-service\n" +
"allow jcr:read,crx:replicate,jcr:removeNode on /asd/public\n" +
"end\n" +
@@ -84,6 +90,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());
}
}
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 a8eea3f..97022a8 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
@@ -27,8 +27,10 @@
import static org.mockito.Mockito.when;
import java.io.File;
+import java.io.StringReader;
import java.nio.file.Paths;
import java.util.Arrays;
+import java.util.List;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -42,6 +44,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;
@@ -87,34 +92,38 @@
assertNotNull(repoinitExtension);
assertEquals(ExtensionType.TEXT, repoinitExtension.getType());
- String expected = "create service user acs-commons-ensure-oak-index-service with path /home/users/system/public\n" +
+ String expected = "create service user acs-commons-ensure-oak-index-service with path /asd/public\n" +
"create path (sling:Folder) /asd\n" +
"create path (sling:Folder) /asd/public\n" +
"set ACL for acs-commons-ensure-oak-index-service\n" +
"allow jcr:read,rep:write,rep:indexDefinitionManagement on /asd/public restriction(rep:glob,*/oak:index/*)\n" +
"end\n" +
- "create service user acs-commons-dispatcher-flush-service with path /home/users/system/public\n" +
+ "create service user acs-commons-dispatcher-flush-service with path /asd/public\n" +
"set ACL for acs-commons-dispatcher-flush-service\n" +
"allow jcr:read,crx:replicate,jcr:removeNode on /asd/public\n" +
"end\n" +
- "create service user acs-commons-package-replication-status-event-service with path /home/users/system/public\n" +
+ "create service user acs-commons-package-replication-status-event-service with path /asd/public\n" +
"set ACL for acs-commons-package-replication-status-event-service\n" +
"allow jcr:read,rep:write,jcr:readAccessControl,jcr:modifyAccessControl on /asd/public\n" +
"end\n" +
- "create service user acs-commons-ensure-service-user-service with path /home/users/system/public\n" +
+ "create service user acs-commons-ensure-service-user-service with path /asd/public\n" +
"set ACL for acs-commons-ensure-service-user-service\n" +
"allow jcr:read,rep:write,jcr:readAccessControl,jcr:modifyAccessControl on /asd/public\n" +
"end\n" +
- "create service user acs-commons-automatic-package-replicator-service with path /home/users/system/public\n" +
+ "create service user acs-commons-automatic-package-replicator-service with path /asd/public\n" +
"set ACL for acs-commons-automatic-package-replicator-service\n" +
"allow jcr:read on /asd/public\n" +
"end\n" +
- "create service user acs-commons-on-deploy-scripts-service with path /home/users/system/public\n" +
+ "create service user acs-commons-on-deploy-scripts-service with path /asd/public\n" +
"set ACL for acs-commons-on-deploy-scripts-service\n" +
"allow jcr:read on /asd/public\n" +
"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
@@ -126,26 +135,30 @@
assertNotNull(repoinitExtension);
assertEquals(ExtensionType.TEXT, repoinitExtension.getType());
- String expected = "create service user acs-commons-package-replication-status-event-service with path /home/users/system/public\n" +
+ String expected = "create service user acs-commons-package-replication-status-event-service with path /asd/public\n" +
"create path (sling:Folder) /asd\n" +
"create path (sling:Folder) /asd/public\n" +
"set ACL for acs-commons-package-replication-status-event-service\n" +
"allow jcr:read,rep:write,jcr:readAccessControl,jcr:modifyAccessControl on /asd/public\n" +
"end\n" +
- "create service user acs-commons-ensure-service-user-service with path /home/users/system/public\n" +
+ "create service user acs-commons-ensure-service-user-service with path /asd/public\n" +
"set ACL for acs-commons-ensure-service-user-service\n" +
"allow jcr:read,rep:write,jcr:readAccessControl,jcr:modifyAccessControl on /asd/public\n" +
"end\n" +
- "create service user acs-commons-automatic-package-replicator-service with path /home/users/system/public\n" +
+ "create service user acs-commons-automatic-package-replicator-service with path /asd/public\n" +
"set ACL for acs-commons-automatic-package-replicator-service\n" +
"allow jcr:read on /asd/public\n" +
"end\n" +
- "create service user acs-commons-on-deploy-scripts-service with path /home/users/system/public\n" +
+ "create service user acs-commons-on-deploy-scripts-service with path /asd/public\n" +
"set ACL for acs-commons-on-deploy-scripts-service\n" +
"allow jcr:read on /asd/public\n" +
"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
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
index c43d3a5..9dd5050 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/SystemUsersEntryHandlerTest.java
@@ -26,6 +26,8 @@
import java.io.File;
import java.util.Arrays;
+import java.io.StringReader;
+import java.util.List;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -38,6 +40,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;
@@ -76,9 +81,13 @@
assertEquals(ExtensionType.TEXT, repoinitExtension.getType());
assertTrue(repoinitExtension.isRequired());
- String expected = "create service user asd-share-commons-asd-index-definition-reader-service with path /home/users/system/asd-index-definition-reader\n";
+ String expected = "create service user asd-share-commons-asd-index-definition-reader-service with path /home/users/system/asd-share-commons\n";
String actual = repoinitExtension.getText();
assertEquals(expected, actual);
+
+ RepoInitParser repoInitParser = new RepoInitParserService();
+ List<Operation> operations = repoInitParser.parse(new StringReader(actual));
+ assertFalse(operations.isEmpty());
}
@Test