You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cs...@apache.org on 2021/01/25 14:45:44 UTC

[sling-whiteboard] branch master updated: SLING-10067 workaround for quoting paths

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

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


The following commit(s) were added to refs/heads/master by this push:
     new c0214fb  SLING-10067 workaround for quoting paths
c0214fb is described below

commit c0214fb71fad36a92db81742ab11de45defcb4c1
Author: Christian Schneider <cs...@adobe.com>
AuthorDate: Mon Jan 25 15:45:32 2021 +0100

    SLING-10067 workaround for quoting paths
---
 .../distribution/chunked/ChunkedDistribution.java  | 26 +++++++++++++++-------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java b/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java
index f040c94..b88dd8c 100644
--- a/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java
+++ b/chunked-distribution/src/main/java/org/apache/sling/distribution/chunked/ChunkedDistribution.java
@@ -21,6 +21,7 @@ package org.apache.sling.distribution.chunked;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.regex.Pattern;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -62,19 +63,19 @@ public class ChunkedDistribution implements JobExecutor {
 
     @Override
     public JobExecutionResult process(Job job, JobExecutionContext context) {
+        String path = requireParam(job, KEY_PATH, String.class);
+        String modeSt = requireParam(job, KEY_MODE, String.class);
+        Mode mode = Mode.valueOf(modeSt);
+        Integer chunkSize = requireParam(job, KEY_CHUNK_SIZE, Integer.class);
+        log.info("Starting chunked tree distribution for path {}", path);
         try {
-            String path = requireParam(job, KEY_PATH, String.class);
-            String modeSt = requireParam(job, KEY_MODE, String.class);
-            Mode mode = Mode.valueOf(modeSt);
-            Integer chunkSize = requireParam(job, KEY_CHUNK_SIZE, Integer.class);
-            log.info("Starting chunked tree distribution for path {}", path);
             try (ResourceResolver resolver = resolverFactory.getServiceResourceResolver(null)) {
                 distribute(resolver, path, mode, chunkSize, context);
                 log.info("Finished chunked tree distribution for path {}", path);
                 return context.result().succeeded();
             }
         } catch (Exception e) {
-            log.warn(e.getMessage(), e);
+            log.warn("Error distributing tree {} with mode {}", path, mode, e);
             context.log(e.getMessage());
             return context.result().message(e.getMessage()).cancelled();
         }
@@ -119,7 +120,7 @@ public class ChunkedDistribution implements JobExecutor {
 
     private void distributeChunk(ResourceResolver resolver, List<String> paths, JobExecutionContext context) {
         try {
-            String[] pathsAr = paths.toArray(new String[] {});
+            String[] pathsAr = quote(paths);
             DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, pathsAr);
             distributor.distribute("publish", resolver, request);
         } catch (Exception e) {
@@ -128,5 +129,14 @@ public class ChunkedDistribution implements JobExecutor {
             throw new RuntimeException(msg, e);
         }
     }
-    
+
+    private String[] quote(List<String> paths) {
+        return paths.stream().map(this::quotePath).toArray(String[]::new);
+    }
+
+    // Workaround for https://issues.apache.org/jira/browse/SLING-10088
+    private String quotePath(String path) {
+        return (path.contains("(")) ? Pattern.quote(path) : path;
+    }
+
 }