This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git


The following commit(s) were added to refs/heads/master by this push:
     new 0bda240  SLING-11072 - Add flag to force recalculation of content 
packages in sling initial content (#126)
0bda240 is described below

commit 0bda2403df03cd3b39b7cf35498ad78a94356eef
Author: Niek Raaijmakers <[email protected]>
AuthorDate: Wed Jan 19 08:13:51 2022 +0100

    SLING-11072 - Add flag to force recalculation of content packages in sling 
initial content (#126)
---
 .../ContentPackage2FeatureModelConverter.java      | 11 +++--
 ...ntentPackage2FeatureModelConverterLauncher.java |  5 +-
 .../handlers/DefaultEntryHandlersManager.java      | 14 ++++--
 .../cpconverter/vltpkg/VaultPackageAssembler.java  | 23 ++++++---
 .../cpconverter/vltpkg/VaultPackageUtils.java      |  8 +++-
 .../vltpkg/VaultPackageAssemblerTest.java          |  4 +-
 .../VaultPackageAssemblerUnparameterizedTest.java  | 54 +++++++++++++++++-----
 7 files changed, 88 insertions(+), 31 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
 
b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index f342e41..0d13bde 100644
--- 
a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ 
b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -106,6 +106,8 @@ public class ContentPackage2FeatureModelConverter extends 
BaseVaultPackageScanne
 
     private boolean removeInstallHooks = false;
     
+    private boolean disablePackageTypeRecalculation = false;
+    
     private BundleSlingInitialContentExtractor 
bundleSlingInitialContentExtractor = new BundleSlingInitialContentExtractor();
 
     public enum PackagePolicy {
@@ -141,11 +143,12 @@ public class ContentPackage2FeatureModelConverter extends 
BaseVaultPackageScanne
     }
 
     public ContentPackage2FeatureModelConverter() throws IOException {
-        this(false, SlingInitialContentPolicy.KEEP);
+        this(false, SlingInitialContentPolicy.KEEP, false);
     }
 
-    public ContentPackage2FeatureModelConverter(boolean strictValidation, 
@NotNull SlingInitialContentPolicy slingInitialContentPolicy) throws 
IOException {
+    public ContentPackage2FeatureModelConverter(boolean strictValidation, 
@NotNull SlingInitialContentPolicy slingInitialContentPolicy, boolean 
disablePackageTypeRecalculation) throws IOException {
         super(strictValidation);
+        this.disablePackageTypeRecalculation = disablePackageTypeRecalculation;
         this.recollectorVaultPackageScanner = new 
RecollectorVaultPackageScanner(this, this.packageManager, strictValidation, 
subContentPackages, slingInitialContentPolicy);
         this.tmpDirectory = 
Files.createTempDirectory("cp2fm-converter").toFile();
     }
@@ -290,7 +293,7 @@ public class ContentPackage2FeatureModelConverter extends 
BaseVaultPackageScanne
         for (VaultPackage vaultPackage : orderedContentPackages) {
             try {
                 emitters.stream().forEach(e -> e.startPackage(vaultPackage));
-                
setMainPackageAssembler(VaultPackageAssembler.create(this.getTempDirectory(), 
vaultPackage, removeInstallHooks));
+                
setMainPackageAssembler(VaultPackageAssembler.create(this.getTempDirectory(), 
vaultPackage, removeInstallHooks, disablePackageTypeRecalculation));
                 assemblers.add(getMainPackageAssembler());
 
                 ArtifactId mvnPackageId = toArtifactId(vaultPackage.getId(), 
vaultPackage.getFile());
@@ -367,7 +370,7 @@ public class ContentPackage2FeatureModelConverter extends 
BaseVaultPackageScanne
 
         emitters.stream().forEach(e -> e.startSubPackage(path, vaultPackage));
 
-        VaultPackageAssembler clonedPackage = 
VaultPackageAssembler.create(this.getTempDirectory(), vaultPackage, 
removeInstallHooks);
+        VaultPackageAssembler clonedPackage = 
VaultPackageAssembler.create(this.getTempDirectory(), vaultPackage, 
removeInstallHooks,disablePackageTypeRecalculation);
 
         // Please note: THIS IS A HACK to meet the new requirement without 
drastically change the original design
         // temporary swap the main handler to collect stuff
diff --git 
a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
 
b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
index d7ccbfa..59098fb 100644
--- 
a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
+++ 
b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
@@ -130,6 +130,9 @@ public final class 
ContentPackage2FeatureModelConverterLauncher implements Runna
     @Option(names = { "--disable-installer-policy" }, description = "Disables 
enforcing that OSGi configurations are only allowed below a folder called 
'config' and OSGi bundles are only allowed below a folder called 'install'. 
Instead both are detected below either 'install' or 'config'.", required = 
false)
     private boolean disableInstallerPolicy = false;
 
+    @Option(names = { "--disable-package-type-recalculation" }, description = 
"Disables the package recalculation", required = false)
+    private boolean disablePackageTypeRecalculation = false;
+
     @Option(names = { "--content-type-package-policy" }, description = 
"Determines what to do with converted packages of type 'content'. Valid values: 
${COMPLETION-CANDIDATES}.", required = false, showDefaultValue = 
Visibility.ALWAYS)
     private ContentPackage2FeatureModelConverter.PackagePolicy 
contentTypePackagePolicy = 
ContentPackage2FeatureModelConverter.PackagePolicy.DROP;
 
@@ -207,7 +210,7 @@ public final class 
ContentPackage2FeatureModelConverterLauncher implements Runna
                     }
                 }
 
-                try (ContentPackage2FeatureModelConverter converter = new 
ContentPackage2FeatureModelConverter(strictValidation, 
slingInitialContentPolicy)) {
+                try (ContentPackage2FeatureModelConverter converter = new 
ContentPackage2FeatureModelConverter(strictValidation, 
slingInitialContentPolicy,disablePackageTypeRecalculation)) {
                     BundleSlingInitialContentExtractor 
bundleSlingInitialContentExtractor = new BundleSlingInitialContentExtractor();
                     converter.setFeaturesManager(featuresManager)
                              .setBundlesDeployer(new 
LocalMavenRepositoryArtifactsDeployer(artifactsOutputDirectory))
diff --git 
a/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java
 
b/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java
index ed7015b..0c63954 100644
--- 
a/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java
+++ 
b/src/main/java/org/apache/sling/feature/cpconverter/handlers/DefaultEntryHandlersManager.java
@@ -33,11 +33,19 @@ public class DefaultEntryHandlersManager implements 
EntryHandlersManager {
     private final List<EntryHandler> entryHandlers = new LinkedList<>();
 
     public DefaultEntryHandlersManager() {
-        this(Collections.emptyMap(), false, SlingInitialContentPolicy.KEEP,new 
BundleSlingInitialContentExtractor(),  
ConverterConstants.SYSTEM_USER_REL_PATH_DEFAULT);
+        this(Collections.emptyMap(), 
+                false, 
+                SlingInitialContentPolicy.KEEP,
+                new BundleSlingInitialContentExtractor(),  
+                ConverterConstants.SYSTEM_USER_REL_PATH_DEFAULT
+        );
     }
 
-    public DefaultEntryHandlersManager(@NotNull Map<String, String> configs, 
boolean enforceConfigurationsAndBundlesBelowProperFolder,
-                                       @NotNull SlingInitialContentPolicy 
slingInitialContentPolicy, @NotNull BundleSlingInitialContentExtractor 
bundleSlingInitialContentExtractor,  @NotNull String systemUserRelPath) {
+    public DefaultEntryHandlersManager(@NotNull Map<String, String> configs, 
+                                       boolean 
enforceConfigurationsAndBundlesBelowProperFolder,
+                                       @NotNull SlingInitialContentPolicy 
slingInitialContentPolicy, 
+                                       @NotNull 
BundleSlingInitialContentExtractor bundleSlingInitialContentExtractor,  
+                                       @NotNull String systemUserRelPath) {
         ServiceLoader<EntryHandler> entryHandlersLoader = 
ServiceLoader.load(EntryHandler.class);
         for (EntryHandler entryHandler : entryHandlersLoader) {
             if (configs.containsKey(entryHandler.getClass().getName())) {
diff --git 
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
 
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
index 6553df3..817a882 100644
--- 
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
+++ 
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
@@ -81,16 +81,21 @@ public class VaultPackageAssembler {
     private final File storingDirectory;
     private final Properties properties;
     private final File tmpDir;
-    
+    private final boolean disablePackageTypeRecalculation;
+
     /**
      * This class can not be instantiated from outside
      */
-    private VaultPackageAssembler(@NotNull File tempDir, @NotNull File 
storingDirectory, @NotNull Properties properties, 
-                                  @NotNull Set<Dependency> dependencies) {
+    private VaultPackageAssembler(@NotNull File tempDir, 
+                                  @NotNull File storingDirectory, 
+                                  @NotNull Properties properties, 
+                                  @NotNull Set<Dependency> dependencies, 
+                                  boolean disablePackageTypeRecalculation) {
         this.storingDirectory = storingDirectory;
         this.properties = properties;
         this.dependencies = dependencies;
         this.tmpDir = tempDir;
+        this.disablePackageTypeRecalculation = disablePackageTypeRecalculation;
     }
     
     /**
@@ -100,9 +105,13 @@ public class VaultPackageAssembler {
      * @param baseTempDir the temp dir
      * @param vaultPackage the package to take as blueprint
      * @param removeInstallHooks whether to remove install hooks or not
+     * @param disablePackageTypeRecalculation disables the package 
recalculation and uses the parent source type                        
      * @return the package assembler
      */
-    public static @NotNull VaultPackageAssembler create(@NotNull File 
baseTempDir, @NotNull VaultPackage vaultPackage, boolean removeInstallHooks) {
+    public static @NotNull VaultPackageAssembler create(@NotNull File 
baseTempDir, 
+                                                        @NotNull VaultPackage 
vaultPackage, 
+                                                        boolean 
removeInstallHooks, 
+                                                        boolean 
disablePackageTypeRecalculation) {
         final File tempDir = new File(baseTempDir, 
"synthetic-content-packages_" + System.currentTimeMillis());
         PackageId packageId = vaultPackage.getId();
         File storingDirectory = initStoringDirectory(packageId, tempDir);
@@ -126,7 +135,7 @@ public class VaultPackageAssembler {
 
         Set<Dependency> dependencies = getDependencies(vaultPackage);
 
-        VaultPackageAssembler assembler = new VaultPackageAssembler(tempDir, 
storingDirectory, properties, dependencies);
+        VaultPackageAssembler assembler = new VaultPackageAssembler(tempDir, 
storingDirectory, properties, dependencies,disablePackageTypeRecalculation);
         
assembler.mergeFilters(Objects.requireNonNull(vaultPackage.getMetaInf().getFilter()));
         return assembler;
     }
@@ -149,7 +158,7 @@ public class VaultPackageAssembler {
         props.put(PackageProperties.NAME_VERSION, packageId.getVersionString() 
+ VERSION_SUFFIX);
 
         props.put(PackageProperties.NAME_DESCRIPTION, description);
-        return new VaultPackageAssembler(tempDir, storingDirectory, props, new 
HashSet<>());
+        return new VaultPackageAssembler(tempDir, storingDirectory, props, new 
HashSet<>(),false);
     }
 
     private static @NotNull File initStoringDirectory(PackageId packageId, 
@NotNull File tempDir) {
@@ -293,7 +302,7 @@ public class VaultPackageAssembler {
         } else {
             sourcePackageType = null;
         }
-        PackageType newPackageType = 
VaultPackageUtils.recalculatePackageType(sourcePackageType, storingDirectory);
+        PackageType newPackageType = 
VaultPackageUtils.recalculatePackageType(sourcePackageType, storingDirectory, 
disablePackageTypeRecalculation);
         if (newPackageType != null) {
             properties.setProperty(PackageProperties.NAME_PACKAGE_TYPE, 
newPackageType.name().toLowerCase());
         }
diff --git 
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java
 
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java
index fed02fc..338e8c2 100644
--- 
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java
+++ 
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageUtils.java
@@ -88,10 +88,14 @@ public class VaultPackageUtils {
         }
     }
 
-    static @Nullable PackageType recalculatePackageType(PackageType 
sourcePackageType, @NotNull File outputDirectory) {
-        if (sourcePackageType != null && sourcePackageType != 
PackageType.MIXED) {
+    static @Nullable PackageType recalculatePackageType(PackageType 
sourcePackageType, 
+                                                        @NotNull File 
outputDirectory, 
+                                                        boolean 
disablePackageTypeRecalculation) {
+        
+        if (sourcePackageType != null && (sourcePackageType != 
PackageType.MIXED || disablePackageTypeRecalculation)) {
             return null;
         }
+        
         AtomicBoolean foundMutableFiles = new AtomicBoolean();
         AtomicBoolean foundImmutableFiles = new AtomicBoolean();
         forEachDirectoryBelowJcrRoot(outputDirectory, (child, base) -> {
diff --git 
a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
 
b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
index ae794cf..31f23ec 100644
--- 
a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
+++ 
b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
@@ -66,7 +66,7 @@ public class VaultPackageAssemblerTest {
         VaultPackage vaultPackage = new PackageManagerImpl().open(file);
 
         this.testDirectory = new File(System.getProperty("java.io.tmpdir"), 
getClass().getName() + '_' + System.currentTimeMillis());
-        this.assembler = VaultPackageAssembler.create(testDirectory, 
vaultPackage, false);
+        this.assembler = VaultPackageAssembler.create(testDirectory, 
vaultPackage, false, false);
     }
 
     @After
@@ -100,7 +100,7 @@ public class VaultPackageAssemblerTest {
         File file = FileUtils.toFile(resource);
         VaultPackage vaultPackage = new PackageManagerImpl().open(file);
 
-        VaultPackageAssembler assembler = 
VaultPackageAssembler.create(testDirectory, vaultPackage, false);
+        VaultPackageAssembler assembler = 
VaultPackageAssembler.create(testDirectory, vaultPackage, false, false);
         PackageId packageId = vaultPackage.getId();
         String fileName = packageId.toString().replaceAll("/", 
"-").replaceAll(":", "-");
         File storingDirectory = new File(assembler.getTempDir(), fileName + 
"-deflated");
diff --git 
a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerUnparameterizedTest.java
 
b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerUnparameterizedTest.java
index 9f6d8d8..7f77a21 100644
--- 
a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerUnparameterizedTest.java
+++ 
b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerUnparameterizedTest.java
@@ -24,6 +24,10 @@ import org.apache.jackrabbit.vault.packaging.PackageType;
 import org.junit.Assert;
 import org.junit.Test;
 
+import static org.apache.jackrabbit.vault.packaging.PackageType.APPLICATION;
+import static org.apache.jackrabbit.vault.packaging.PackageType.CONTENT;
+import static org.apache.jackrabbit.vault.packaging.PackageType.MIXED;
+
 public class VaultPackageAssemblerUnparameterizedTest {
 
     @Test
@@ -35,19 +39,45 @@ public class VaultPackageAssemblerUnparameterizedTest {
         resource = VaultPackageAssemblerTest.class.getResource("../mixed");
         File mixedInput = FileUtils.toFile(resource);
 
-        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(PackageType.APPLICATION,
 immutableInput));
-        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(PackageType.CONTENT, 
immutableInput));
-        Assert.assertEquals(PackageType.APPLICATION, 
VaultPackageUtils.recalculatePackageType(PackageType.MIXED, immutableInput));
-        Assert.assertEquals(PackageType.APPLICATION, 
VaultPackageUtils.recalculatePackageType(null, immutableInput));
+        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(APPLICATION, 
immutableInput, false));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(CONTENT, 
immutableInput, false));;
+        Assert.assertEquals(APPLICATION, 
VaultPackageUtils.recalculatePackageType(MIXED, immutableInput, false));;
+        Assert.assertEquals(APPLICATION, 
VaultPackageUtils.recalculatePackageType(null, immutableInput, false));;
+
+        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(APPLICATION, 
mutableInput, false));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(CONTENT, 
mutableInput, false));;
+        Assert.assertEquals(CONTENT, 
VaultPackageUtils.recalculatePackageType(MIXED, mutableInput, false));;
+        Assert.assertEquals(CONTENT, 
VaultPackageUtils.recalculatePackageType(null, mutableInput, false));;
+
+        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(APPLICATION, 
mixedInput, false));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(CONTENT, 
mixedInput, false));;
+        Assert.assertEquals(MIXED, 
VaultPackageUtils.recalculatePackageType(MIXED, mixedInput, false));;
+        Assert.assertEquals(MIXED, 
VaultPackageUtils.recalculatePackageType(null, mixedInput, false));;
+    }
+
+
+    @Test
+    public void testRecalculatePackageTypeWithoutParentType() {
+        URL resource = 
VaultPackageAssemblerTest.class.getResource("../immutable");
+        File immutableInput = FileUtils.toFile(resource);
+        resource = VaultPackageAssemblerTest.class.getResource("../mutable");
+        File mutableInput = FileUtils.toFile(resource);
+        resource = VaultPackageAssemblerTest.class.getResource("../mixed");
+        File mixedInput = FileUtils.toFile(resource);
+
+        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(APPLICATION, 
immutableInput, true));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(CONTENT, 
immutableInput, true));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(MIXED, 
immutableInput, true));;
+        Assert.assertEquals(APPLICATION, 
VaultPackageUtils.recalculatePackageType(null, immutableInput, true));;
 
-        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(PackageType.APPLICATION,
 mutableInput));
-        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(PackageType.CONTENT, 
mutableInput));
-        Assert.assertEquals(PackageType.CONTENT, 
VaultPackageUtils.recalculatePackageType(PackageType.MIXED, mutableInput));
-        Assert.assertEquals(PackageType.CONTENT, 
VaultPackageUtils.recalculatePackageType(null, mutableInput));
+        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(APPLICATION, 
mutableInput, true));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(CONTENT, 
mutableInput, true));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(MIXED, 
mutableInput, true));;
+        Assert.assertEquals(CONTENT, 
VaultPackageUtils.recalculatePackageType(null, mutableInput, true));;
 
-        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(PackageType.APPLICATION,
 mixedInput));
-        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(PackageType.CONTENT, 
mixedInput));
-        Assert.assertEquals(PackageType.MIXED, 
VaultPackageUtils.recalculatePackageType(PackageType.MIXED, mixedInput));
-        Assert.assertEquals(PackageType.MIXED, 
VaultPackageUtils.recalculatePackageType(null, mixedInput));
+        
Assert.assertNull(VaultPackageUtils.recalculatePackageType(APPLICATION, 
mixedInput, true));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(CONTENT, 
mixedInput, true));;
+        Assert.assertNull(VaultPackageUtils.recalculatePackageType(MIXED, 
mixedInput, true));;
+        Assert.assertEquals(MIXED, 
VaultPackageUtils.recalculatePackageType(null, mixedInput, true));;
     }
 }

Reply via email to