You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2022/01/10 14:27:34 UTC

[jackrabbit-filevault] 01/01: JCRVLT-588: handle symlinks in path to install state

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

reschke pushed a commit to branch JCRVLT-588
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit d1641fb4aa133c95454c757f0e75a1f58e776583
Author: Julian Reschke <ju...@gmx.de>
AuthorDate: Mon Jan 10 15:27:18 2022 +0100

    JCRVLT-588: handle symlinks in path to install state
---
 .../vault/packaging/registry/impl/FSInstallState.java | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSInstallState.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSInstallState.java
index 2b9c58c..0efc197 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSInstallState.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSInstallState.java
@@ -22,7 +22,6 @@ import java.io.OutputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -51,6 +50,8 @@ import org.apache.jackrabbit.vault.util.xml.serialize.FormattingXmlStreamWriter;
 import org.apache.jackrabbit.vault.util.xml.serialize.OutputFormat;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -64,6 +65,8 @@ import org.xml.sax.SAXException;
  */
 public class FSInstallState {
 
+    private static final Logger log = LoggerFactory.getLogger(FSInstallState.class);
+
     private static final String TAG_REGISTRY_METADATA = "registryMetadata";
 
     private static final String ATTR_PACKAGE_ID = "packageid";
@@ -301,7 +304,19 @@ public class FSInstallState {
      * @throws IOException if an error occurs.
      */
     public void save(Path file) throws IOException {
-        Files.createDirectories(file.getParent());
+        Path parent = file.getParent();
+        log.debug("checking for presence of {} - exists {} - isDirectory {}", parent, Files.exists(parent), Files.isDirectory(parent));
+        if (!Files.exists(parent)) {
+            Path created = Files.createDirectories(parent);
+            log.debug("Created {}", created);
+        } else {
+            if (!Files.isDirectory(parent)) {
+                String message = parent + " exists, but is not a directory - aborting";
+                log.error(message);
+                throw new IOException(message);
+            }
+        }
+
         try (OutputStream out = Files.newOutputStream(file)) {
             save(out);
         }