Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SLING-11560 - Allow configuring the IdConflictPolicy and set the default to LEGACY #61

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@
<dependency>
<groupId>org.apache.jackrabbit.vault</groupId>
<artifactId>org.apache.jackrabbit.vault</artifactId>
<version>3.4.0</version>
<version>3.6.1-T20220805092633-0b8a2641</version>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you depend on the latest officially released version, 3.6.0 ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In that version we don't have the LEGACY conflict policy.

</dependency>
<!-- HTTP -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.api.RegexpPathMapping;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
Expand Down Expand Up @@ -74,6 +75,7 @@ public class FileVaultContentSerializer implements DistributionContentSerializer
private final ImportMode importMode;
private final AccessControlHandling aclHandling;
private final AccessControlHandling cugHandling;
private final IdConflictPolicy idConflictPolicy;
private final String[] packageRoots;
private final int autosaveThreshold;
private final TreeMap<String, List<String>> nodeFilters;
Expand All @@ -83,15 +85,15 @@ public class FileVaultContentSerializer implements DistributionContentSerializer
private final Map<String, String> exportPathMapping;
private final boolean strict;

public FileVaultContentSerializer(String name, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, AccessControlHandling cugHandling, String[] packageRoots,
String[] nodeFilters, String[] propertyFilters, boolean useBinaryReferences, int autosaveThreshold,
Map<String, String> exportPathMapping,
boolean strict) {
public FileVaultContentSerializer(String name, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, AccessControlHandling cugHandling,
IdConflictPolicy idConflictPolicy, String[] packageRoots, String[] nodeFilters, String[] propertyFilters, boolean useBinaryReferences,
int autosaveThreshold, Map<String, String> exportPathMapping, boolean strict) {
this.name = name;
this.packaging = packaging;
this.importMode = importMode;
this.aclHandling = aclHandling;
this.cugHandling = cugHandling;
this.idConflictPolicy = idConflictPolicy;
this.packageRoots = packageRoots;
this.autosaveThreshold = autosaveThreshold;
this.nodeFilters = VltUtils.parseFilters(nodeFilters);
Expand Down Expand Up @@ -131,7 +133,7 @@ public void importFromStream(ResourceResolver resourceResolver, InputStream inpu
Archive archive = null;
try {
session = getSession(resourceResolver);
ImportOptions importOptions = VltUtils.getImportOptions(aclHandling, cugHandling, importMode, autosaveThreshold, strict);
ImportOptions importOptions = VltUtils.getImportOptions(aclHandling, cugHandling, importMode, idConflictPolicy, autosaveThreshold, strict);
ErrorListener errorListener = new ErrorListener();
importOptions.setListener(errorListener);
Importer importer = new Importer(importOptions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/
package org.apache.sling.distribution.serialization.impl.vlt;

import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
import org.apache.jackrabbit.vault.packaging.Packaging;
Expand Down Expand Up @@ -85,6 +86,8 @@ public class VaultDistributionPackageBuilderFactory implements DistributionPacka
String aclHandling();
@AttributeDefinition(name="Cug Handling", description = "The vlt cug handling mode for created packages.")
String cugHandling();
@AttributeDefinition(name="Id Conflict Policy", description = "The conflict policy for created packages.")
String conflictPolicy();
@AttributeDefinition(name="Package Roots", description = "The package roots to be used for created packages. "
+ "(this is useful for assembling packages with an user that cannot read above the package root)")
String[] package_roots();
Expand Down Expand Up @@ -195,6 +198,7 @@ public void activate(BundleContext context, Config conf) {
String importModeString = SettingsUtils.removeEmptyEntry(conf.importMode());
String aclHandlingString = SettingsUtils.removeEmptyEntry(conf.aclHandling());
String cugHandlingString = SettingsUtils.removeEmptyEntry(conf.cugHandling());
String conflictPolicyString = SettingsUtils.removeEmptyEntry(conf.conflictPolicy());

String[] packageRoots = SettingsUtils.removeEmptyEntries(conf.package_roots());
String[] packageNodeFilters = SettingsUtils.removeEmptyEntries(conf.package_filters());
Expand Down Expand Up @@ -226,13 +230,18 @@ public void activate(BundleContext context, Config conf) {
cugHandling = AccessControlHandling.valueOf(cugHandlingString.trim());
}

IdConflictPolicy conflictPolicy = null;
if (conflictPolicyString != null) {
conflictPolicy = IdConflictPolicy.valueOf(conflictPolicyString.trim());
}

// check the mount path patterns, if any
Map<String, String> pathsMapping = toMap(conf.pathsMapping(), new String[0]);
pathsMapping = SettingsUtils.removeEmptyEntries(pathsMapping);

boolean strictImport = conf.strictImport();

DistributionContentSerializer contentSerializer = new FileVaultContentSerializer(name, packaging, importMode, aclHandling, cugHandling,
DistributionContentSerializer contentSerializer = new FileVaultContentSerializer(name, packaging, importMode, aclHandling, cugHandling, conflictPolicy,
packageRoots, packageNodeFilters, packagePropertyFilters, useBinaryReferences, autosaveThreshold, pathsMapping, strictImport);

DistributionPackageBuilder wrapped;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,11 @@

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
import org.apache.jackrabbit.vault.fs.config.MetaInf;
Expand Down Expand Up @@ -79,7 +81,7 @@ public class VltUtils {
private static final String MAPPING_DELIMITER = ";";

public static WorkspaceFilter createFilter(DistributionRequest distributionRequest, NavigableMap<String, List<String>> nodeFilters,
NavigableMap<String, List<String>> propertyFilters) {
NavigableMap<String, List<String>> propertyFilters) throws ConfigurationException {
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();

for (String path : distributionRequest.getPaths()) {
Expand Down Expand Up @@ -122,7 +124,7 @@ public static String[] getPaths(MetaInf metaInf) {
return paths;
}

private static void initFilterSet(PathFilterSet filterSet, NavigableMap<String, List<String>> globalFilters, List<String> patterns) {
private static void initFilterSet(PathFilterSet filterSet, NavigableMap<String, List<String>> globalFilters, List<String> patterns) throws ConfigurationException {

// add the most specific filter rules
String root = filterSet.getRoot();
Expand Down Expand Up @@ -227,7 +229,7 @@ private static String getPackageRoot(List<PathFilterSet> filterSets, String[] pa
return packageRoot;
}

public static ImportOptions getImportOptions(AccessControlHandling aclHandling, AccessControlHandling cugHandling, ImportMode importMode, int autosaveThreshold, boolean strict) {
public static ImportOptions getImportOptions(AccessControlHandling aclHandling, AccessControlHandling cugHandling, ImportMode importMode, IdConflictPolicy idConflictPolicy, int autosaveThreshold, boolean strict) {
ImportOptions opts = new ImportOptions();
if (aclHandling != null) {
opts.setAccessControlHandling(aclHandling);
Expand All @@ -247,6 +249,12 @@ public static ImportOptions getImportOptions(AccessControlHandling aclHandling,
// default to update
opts.setImportMode(ImportMode.UPDATE);
}
if (idConflictPolicy != null) {
opts.setIdConflictPolicy(idConflictPolicy);
} else {
// default to legacy
opts.setIdConflictPolicy(IdConflictPolicy.LEGACY);
}

opts.setPatchKeepInRepo(false);

Expand Down Expand Up @@ -435,7 +443,7 @@ public static DistributionRequest sanitizeRequest(DistributionRequest request) {
return new SimpleDistributionRequest(requestType, paths.toArray(new String[paths.size()]), deepPaths, filters);
}

private static PathFilterSet.Entry<DefaultPathFilter> extractPathPattern(String pattern) {
private static PathFilterSet.Entry<DefaultPathFilter> extractPathPattern(String pattern) throws ConfigurationException {
PathFilterSet.Entry<DefaultPathFilter> result;
if (pattern.startsWith("+")) {
result = new PathFilterSet.Entry<DefaultPathFilter>(new DefaultPathFilter(pattern.substring(1)), true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package org.apache.sling.distribution.packaging.impl.importer;

import org.apache.commons.lang3.StringUtils;
import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
import org.apache.jackrabbit.vault.packaging.impl.PackagingImpl;
Expand Down Expand Up @@ -84,6 +85,7 @@ public void importPackageWithLargeHeader() throws Exception {
ImportMode.UPDATE,
AccessControlHandling.IGNORE,
AccessControlHandling.IGNORE,
IdConflictPolicy.LEGACY,
new String[0],
new String[0],
new String[0],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.io.OutputStream;
import java.util.HashMap;

import org.apache.jackrabbit.vault.fs.api.IdConflictPolicy;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
import org.apache.jackrabbit.vault.packaging.ExportOptions;
Expand Down Expand Up @@ -76,14 +77,15 @@ public void testExportToStream() throws Exception {

ImportMode importMode = ImportMode.REPLACE;
AccessControlHandling aclHandling = AccessControlHandling.IGNORE;
IdConflictPolicy conflictPolicy = IdConflictPolicy.LEGACY;

String[] packageRoots = new String[]{"/etc/packages"};
String[] nodeFilters = new String[0];
String[] propertyFilters = new String[0];
boolean useReferences = false;
int threshold = 1024;
FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
aclHandling, aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>(), false);
FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode, aclHandling, aclHandling,
conflictPolicy, packageRoots, nodeFilters, propertyFilters, useReferences, threshold, new HashMap<String, String>(), false);

ResourceResolver sessionResolver = mock(ResourceResolver.class);
Session session = mock(Session.class);
Expand Down Expand Up @@ -118,17 +120,18 @@ public void testImportFromStream() throws Exception {
Packaging packaging = mock(Packaging.class);
ImportMode importMode = ImportMode.REPLACE;
AccessControlHandling aclHandling = AccessControlHandling.IGNORE;
IdConflictPolicy conflictPolicy = IdConflictPolicy.LEGACY;

String[] packageRoots = new String[]{"/"};
String[] nodeFilters = new String[0];
String[] propertyFilters = new String[0];
boolean useReferences = false;
int thershold = 1024;
FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode,
aclHandling, aclHandling, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>(), true);
FileVaultContentSerializer fileVaultContentSerializer = new FileVaultContentSerializer("vlt", packaging, importMode, aclHandling, aclHandling,
conflictPolicy, packageRoots, nodeFilters, propertyFilters, useReferences, thershold, new HashMap<String, String>(), true);

File file = new File(getClass().getResource("/vlt/dp.vlt").getFile());

fileVaultContentSerializer.importFromStream(context.resourceResolver(), new FileInputStream(file));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.apache.jackrabbit.vault.fs.api.PathFilter;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.SimpleDistributionRequest;
import org.junit.Test;
Expand Down Expand Up @@ -119,7 +120,7 @@ public void testFilterParsingWithSamePath() throws Exception {
}

@Test
public void testCreateFilterWithParenthesis() {
public void testCreateFilterWithParenthesis() throws ConfigurationException {
DistributionRequest request = new SimpleDistributionRequest(ADD, false, "/nodewith(shouldwork");
NavigableMap<String, List<String>> nodeFilters = new TreeMap<String, List<String>>();
NavigableMap<String, List<String>> propFilters = new TreeMap<String, List<String>>();
Expand All @@ -138,4 +139,4 @@ public void testSanitizeWithPolicyNodeIsConvertedToDeepPath() {
assertThat(sanitizedRequest.isDeep(pathWithoutPolicy), equalTo(false));
}

}
}