[ 
https://issues.apache.org/jira/browse/KARAF-5678?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16415477#comment-16415477
 ] 

ASF GitHub Bot commented on KARAF-5678:
---------------------------------------

grgrzybek closed pull request #480: [KARAF-5678] Do not overwrite existing 
config files from boot/startup…
URL: https://github.com/apache/karaf/pull/480
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
 
b/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
index c9c35606cc..f478f33dd7 100644
--- 
a/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
+++ 
b/profile/src/main/java/org/apache/karaf/profile/assembly/AssemblyDeployCallback.java
@@ -154,45 +154,56 @@ public void 
installConfigs(org.apache.karaf.features.Feature feature) throws IOE
         // Install
         Downloader downloader = manager.createDownloader();
         for (Config config : ((Feature) feature).getConfig()) {
+            Path configFile = etcDirectory.resolve(config.getName() + ".cfg");
+            if (Files.exists(configFile) && !config.isAppend()) {
+                LOGGER.info("      not changing existing config file: {}", 
homeDirectory.relativize(configFile));
+                continue;
+            }
             if (config.isExternal()) {
                 downloader.download(config.getValue().trim(), provider -> {
                     Path input = provider.getFile().toPath();
                     byte[] data = Files.readAllBytes(input);
-                    Path configFile = etcDirectory.resolve(config.getName() + 
".cfg");
-                    LOGGER.info("      adding config file: {}", 
homeDirectory.relativize(configFile));
-                    if (!Files.exists(configFile)) {
-                        Files.write(configFile, data);
-                    } else if (config.isAppend()) {
+                    if (config.isAppend()) {
+                        LOGGER.info("      appending to config file: {}", 
homeDirectory.relativize(configFile));
                         Files.write(configFile, data, 
StandardOpenOption.APPEND);
+                    } else {
+                        LOGGER.info("      adding config file: {}", 
homeDirectory.relativize(configFile));
+                        Files.write(configFile, data);
                     }
                 });
             } else {
                 byte[] data = config.getValue().getBytes();
-                Path configFile = etcDirectory.resolve(config.getName() + 
".cfg");
-                LOGGER.info("      adding config file: {}", 
homeDirectory.relativize(configFile));
-                if (!Files.exists(configFile)) {
-                    Files.write(configFile, data);
-                } else if (config.isAppend()) {
+                if (config.isAppend()) {
+                    LOGGER.info("      appending to config file: {}", 
homeDirectory.relativize(configFile));
                     Files.write(configFile, data, StandardOpenOption.APPEND);
+                } else {
+                    LOGGER.info("      adding config file: {}", 
homeDirectory.relativize(configFile));
+                    Files.write(configFile, data);
                 }
             }
         }
         for (final ConfigFile configFile : ((Feature) 
feature).getConfigfile()) {
-            downloader.download(configFile.getLocation(), provider -> {
-                Path input = provider.getFile().toPath();
-                String path = configFile.getFinalname();
-                if (path.startsWith("/")) {
-                    path = path.substring(1);
-                }
-                path = substFinalName(path);
-                Path output = homeDirectory.resolve(path);
-                LOGGER.info("      adding config file: {}", path);
-                Files.copy(input, output, StandardCopyOption.REPLACE_EXISTING);
-            });
+            String path = configFile.getFinalname();
+            if (path.startsWith("/")) {
+                path = path.substring(1);
+            }
+            path = substFinalName(path);
+            final Path output = homeDirectory.resolve(path);
+            final String finalPath = path;
+            if (configFile.isOverride() || !Files.exists(output)) {
+                downloader.download(configFile.getLocation(), provider -> {
+                    Path input = provider.getFile().toPath();
+                    if (configFile.isOverride()) {
+                        LOGGER.info("      overwriting config file: {}", 
finalPath);
+                    } else {
+                        LOGGER.info("      adding config file: {}", finalPath);
+                    }
+                    Files.copy(input, output, 
StandardCopyOption.REPLACE_EXISTING);
+                });
+            }
         }
     }
 
-    
     @Override
     public void installLibraries(org.apache.karaf.features.Feature feature) 
throws IOException {
         assertNotBlacklisted(feature);
diff --git 
a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java 
b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
index 5b9a6c468a..06dff5dcdd 100644
--- a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
+++ b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java
@@ -1068,9 +1068,13 @@ private void doGenerateAssembly() throws Exception {
         LOGGER.info("Writing configurations");
         for (Map.Entry<String, byte[]> config : 
overallEffective.getFileConfigurations().entrySet()) {
             Path configFile = etcDirectory.resolve(config.getKey());
-            LOGGER.info("   adding config file: {}", 
homeDirectory.relativize(configFile));
-            Files.createDirectories(configFile.getParent());
-            Files.write(configFile, config.getValue());
+            if (Files.exists(configFile)) {
+                LOGGER.info("   not changing existing config file: {}", 
homeDirectory.relativize(configFile));
+            } else {
+                LOGGER.info("   adding config file: {}", 
homeDirectory.relativize(configFile));
+                Files.createDirectories(configFile.getParent());
+                Files.write(configFile, config.getValue());
+            }
         }
 
         // 'improve' configuration files.
diff --git 
a/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java 
b/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java
index de40401ffd..df928f5851 100644
--- 
a/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java
+++ 
b/profile/src/main/java/org/apache/karaf/profile/assembly/ConfigInstaller.java
@@ -19,6 +19,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -60,18 +61,35 @@ public void installConfigs(Feature feature, Downloader 
downloader, ArtifactInsta
                 installer.installArtifact(configFile.getLocation().trim());
             }
             // Extract configs
+            Path homeDirectory = etcDirectory.getParent();
             for (Config config : content.getConfig()) {
                 if (pidMatching(config.getName())) {
                     Path configFile = etcDirectory.resolve(config.getName() + 
".cfg");
-                    LOGGER.info("      adding config file: {}", configFile);
+                    if (!config.isAppend() && Files.exists(configFile)) {
+                        LOGGER.info("      not changing existing config file: 
{}", homeDirectory.relativize(configFile));
+                        continue;
+                    }
                     if (config.isExternal()) {
                         downloader.download(config.getValue().trim(), provider 
-> {
                             synchronized (provider) {
-                                Files.copy(provider.getFile().toPath(), 
configFile, StandardCopyOption.REPLACE_EXISTING);
+                                if (config.isAppend()) {
+                                    byte[] data = 
Files.readAllBytes(provider.getFile().toPath());
+                                    LOGGER.info("      appending to config 
file: {}", homeDirectory.relativize(configFile));
+                                    Files.write(configFile, data, 
StandardOpenOption.APPEND);
+                                } else {
+                                    LOGGER.info("      adding config file: 
{}", homeDirectory.relativize(configFile));
+                                    Files.copy(provider.getFile().toPath(), 
configFile, StandardCopyOption.REPLACE_EXISTING);
+                                }
                             }
                         });
                     } else {
-                        Files.write(configFile, config.getValue().getBytes());
+                        if (config.isAppend()) {
+                            LOGGER.info("      appending to config file: {}", 
homeDirectory.relativize(configFile));
+                            Files.write(configFile, 
config.getValue().getBytes(), StandardOpenOption.APPEND);
+                        } else {
+                            LOGGER.info("      adding config file: {}", 
homeDirectory.relativize(configFile));
+                            Files.write(configFile, 
config.getValue().getBytes());
+                        }
                     }
                 }
             }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Existing configfiles (in kar) may be overwritten when building assembly
> -----------------------------------------------------------------------
>
>                 Key: KARAF-5678
>                 URL: https://issues.apache.org/jira/browse/KARAF-5678
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-profile
>    Affects Versions: 4.2.0.M2
>            Reporter: Grzegorz Grzybek
>            Assignee: Grzegorz Grzybek
>            Priority: Major
>             Fix For: 4.2.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to