From 45517f7ed2be245b6d10fc5bd9cbe88230a626e5 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Tue, 15 Jan 2019 21:53:59 +0000
Subject: [PATCH] Auto-install borg...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java |    6 ++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java                |   19 +++++++++++++++----
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java   |    2 ++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java                     |    7 ++++++-
 4 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
index e1fc3b4..6538902 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -36,14 +36,25 @@
         BorgCommand command = new BorgCommand()
                 .setParams("--version")
                 .setDescription("Getting borg version.");
-        JobResult<String> jobResult = getResult(command);
+
+        BorgJob<String> job = new BorgJob<>(command);
+        JobResult<String> jobResult = job.execute();
         if (jobResult == null || jobResult.getStatus() != JobResult.Status.OK) {
             return null;
         }
-        String version = jobResult.getResultObject();
-        String[] strs = StringUtils.split(version);
+        String origVersion = jobResult.getResultObject();
+        String version = origVersion;
+        String[] strs = StringUtils.split(origVersion);
         if (strs != null) {
-            version = strs[strs.length - 1]; // Work arround: borg returns "borg-macosx64 1.1.8" as version string (command is included).
+            if (!StringUtils.containsIgnoreCase(origVersion, "borg")) {
+                version = "";
+            } else {
+                version = strs[strs.length - 1]; // Work arround: borg returns "borg-macosx64 1.1.8" as version string (command is included).
+            }
+        }
+        if (version.length() == 0 || !Character.isDigit(version.charAt(0))) {
+            log.error("Version string returned by '" + job.getCommandLineAsString() + "' not as expected (not borg?): " + origVersion);
+            return null;
         }
         log.info("Borg version: " + version);
         return version;
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
index d26a002..1e13633 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
@@ -52,7 +52,12 @@
         if (command == null) {
             return null;
         }
-        CommandLine commandLine = new CommandLine(ConfigurationHandler.getConfiguration().getBorgCommand());
+        String borgCommand = ConfigurationHandler.getConfiguration().getBorgCommand();
+        if (StringUtils.isBlank(borgCommand)) {
+            log.error("Can't run empty borg command.");
+            return null;
+        }
+        CommandLine commandLine = new CommandLine(borgCommand);
         commandLine.addArgument(command.getCommand());
         if (command.getParams() != null) {
             for (String param : command.getParams()) {
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
index 0c800e6..fa2c938 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
@@ -52,6 +52,9 @@
         if (commandLine == null) {
             commandLine = buildCommandLine();
         }
+        if (commandLine == null) {
+            return null;
+        }
         if (commandLineAsString == null) {
             commandLineAsString = commandLine.getExecutable() + " " + StringUtils.join(commandLine.getArguments(), " ");
         }
@@ -61,6 +64,9 @@
     @Override
     public JobResult<String> execute() {
         getCommandLineAsString();
+        if (commandLine == null) {
+            return null;
+        }
         DefaultExecutor executor = new DefaultExecutor();
         if (workingDirectory != null) {
             executor.setWorkingDirectory(workingDirectory);
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
index 6f4dd5c..4f8196d 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
@@ -55,6 +55,8 @@
             if (borgCommandChanged) {
                 configuration.setBorgCommand(newVersion.getBorgCommand());
                 version(configuration);
+            } else {
+                newVersion.copyFrom(oldVersion); // Restore all old settings.
             }
         } else {
             if (borgBinaryChanged) {

--
Gitblit v1.10.0