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));;
}
}