From 3167498290b9b988b8adbafc7a9c5faba73ba833 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Wed, 19 Dec 2018 07:12:53 +0000
Subject: [PATCH] ...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java          |    4 ++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java               |   47 ++++++++++++++++++++++++++++++++++++-----------
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java          |    6 ++++--
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java |    2 +-
 4 files changed, 45 insertions(+), 14 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 630d7ac..af543d1 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -1,7 +1,6 @@
 package de.micromata.borgbutler;
 
 import de.micromata.borgbutler.config.BorgRepoConfig;
-import de.micromata.borgbutler.config.Definitions;
 import de.micromata.borgbutler.data.Archive;
 import de.micromata.borgbutler.data.Repository;
 import de.micromata.borgbutler.json.JsonUtils;
@@ -21,6 +20,9 @@
 import java.util.List;
 import java.util.Scanner;
 
+/**
+ * Creates and executes  borg commands by calling system's borg application (Borg must be installed).
+ */
 public class BorgCommands {
     private static Logger log = LoggerFactory.getLogger(BorgCommands.class);
 
@@ -31,7 +33,11 @@
      * @return Parsed repo config returned by Borg command (without archives).
      */
     public static Repository info(BorgRepoConfig repoConfig) {
-        BorgCommand command = new BorgCommand().setRepoConfig(repoConfig).setCommand("info").setParams("--json");
+        BorgCommand command = new BorgCommand()
+                .setRepoConfig(repoConfig)
+                .setCommand("info")
+                .setParams("--json")
+                .setDescription("Loading info of repo '" + repoConfig.getDisplayName() + "'.");
         execute(command);
         if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
             return null;
@@ -59,7 +65,11 @@
      * @param repository Repository without archives, archives will be loaded.
      */
     public static void list(BorgRepoConfig repoConfig, Repository repository) {
-        BorgCommand command = new BorgCommand().setRepoConfig(repoConfig).setCommand("list").setParams("--json");
+        BorgCommand command = new BorgCommand()
+                .setRepoConfig(repoConfig)
+                .setCommand("list")
+                .setParams("--json")
+                .setDescription("Loading list of archives of repo '" + repoConfig.getDisplayName() + "'.");
         execute(command);
         if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
             log.error("Can't load archives from repo '" + repository.getName() + "'.");
@@ -95,8 +105,12 @@
      * @param repository Repository without archives.
      */
     public static void info(BorgRepoConfig repoConfig, Archive archive, Repository repository) {
-        BorgCommand command = new BorgCommand().setRepoConfig(repoConfig).setCommand("info").setArchive(archive.getName())
-                .setParams("--json");
+        BorgCommand command = new BorgCommand()
+                .setRepoConfig(repoConfig)
+                .setCommand("info")
+                .setArchive(archive.getName())
+                .setParams("--json")
+                .setDescription("Loading info of archive '" + archive.getName() + "' of repo '" + repoConfig.getDisplayName() + "'.");
         execute(command);
         if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
             return;
@@ -131,9 +145,13 @@
         ;
     }
 
-    public static List<BorgFilesystemItem> listArchiveContent(BorgRepoConfig repoConfig, String archive) {
-        BorgCommand command = new BorgCommand().setRepoConfig(repoConfig).setCommand("list").setArchive(archive)
-                .setParams("--json-lines");
+    public static List<BorgFilesystemItem> listArchiveContent(BorgRepoConfig repoConfig, Archive archive) {
+        BorgCommand command = new BorgCommand()
+                .setRepoConfig(repoConfig)
+                .setCommand("list")
+                .setArchive(archive.getName())
+                .setParams("--json-lines")
+                .setDescription("Loading list of files of archive '" + archive.getName() + "' of repo '" + repoConfig.getDisplayName() + "'.");
         execute(command);
         List<BorgFilesystemItem> content = new ArrayList<>();
         if (command.getResultStatus() != BorgCommand.ResultStatus.OK) {
@@ -161,13 +179,20 @@
      * @return Used sub directory with the restored content.
      * @throws IOException
      */
-    public static File extractFiles(File restoreHomeDir, BorgRepoConfig repoConfig, String archive, String path) throws IOException {
+    public static File extractFiles(File restoreHomeDir, BorgRepoConfig repoConfig, Archive archive, String path) throws IOException {
         File restoreDir = new File(restoreHomeDir, ReplaceUtils.encodeFilename(repoConfig.getDisplayName(), true));
         if (!restoreDir.exists()) {
             restoreDir.mkdirs();
         }
-        BorgCommand command = new BorgCommand().setWorkingDir(restoreDir).setRepoConfig(repoConfig)
-                .setCommand("extract").setArchive(archive).setArgs(path);
+        BorgCommand command = new BorgCommand()
+                .setWorkingDir(restoreDir)
+                .setRepoConfig(repoConfig)
+                .setCommand("extract")
+                .setArchive(archive.getName())
+                .setArgs(path)
+                .setDescription("Extract content of archive '" + archive.getName()
+                                + "' of repo '" + repoConfig.getDisplayName() + "': "
+                        + path);
         execute(command);
         return restoreDir;
     }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java
index 3d127a9..5740743 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgExecutorQueue.java
@@ -83,9 +83,13 @@
         PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
         executor.setStreamHandler(streamHandler);
         String borgCall = cmdLine.getExecutable() + " " + StringUtils.join(cmdLine.getArguments(), " ");
+        if (StringUtils.isNotBlank(command.getDescription())) {
+            log.info(command.getDescription());
+        }
         log.info("Executing '" + borgCall + "'...");
         try {
             executor.execute(cmdLine, getEnvironment(command.getRepoConfig()));
+            command.setResultStatus(BorgCommand.ResultStatus.OK);
         } catch (Exception ex) {
             log.error("Error while creating environment for borg call '" + borgCall + "': " + ex.getMessage(), ex);
             command.setResultStatus(BorgCommand.ResultStatus.ERROR);
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
index 1cfa278..e4fb135 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -68,7 +68,9 @@
         }
         if (repository == null || repository.getLocation() == null) {
             repository = BorgCommands.info(repoConfig);
-            repoCacheAccess.put(repoConfig.getRepo(), repository);
+            if (repository != null) {
+                repoCacheAccess.put(repoConfig.getRepo(), repository);
+            }
         }
         if (repository == null) {
             log.warn("Repo with name '" + repoConfig.getRepo() + "' not found.");
@@ -262,7 +264,7 @@
         }
         List<BorgFilesystemItem> items = archiveFilelistCache.load(repoConfig, archive, filter);
         if (items == null && forceLoad) {
-            List<BorgFilesystemItem> list = BorgCommands.listArchiveContent(repoConfig, archive.getName());
+            List<BorgFilesystemItem> list = BorgCommands.listArchiveContent(repoConfig, archive);
             if (CollectionUtils.isNotEmpty(list)) {
                 archiveFilelistCache.save(repoConfig, archive, list);
                 items = new ArrayList<>();
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java
index f6c87e6..8a6e39f 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java
@@ -120,7 +120,7 @@
         try {
             BorgFilesystemItem item = items.get(0);
             File restoreHomeDir = ConfigurationHandler.getConfiguration().getRestoreHomeDir();
-            File restoreDir = BorgCommands.extractFiles(restoreHomeDir, repoConfig, archive.getName(), item.getPath());
+            File restoreDir = BorgCommands.extractFiles(restoreHomeDir, repoConfig, archive, item.getPath());
             List<java.nio.file.Path> files = DirUtils.listFiles(restoreDir.toPath());
             if (CollectionUtils.isEmpty(files)) {
                 log.error("No files extracted.");

--
Gitblit v1.10.0