From 3f61de79937ff7692e22a6b87cc36ed1db56d8bc Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Thu, 20 Dec 2018 01:12:38 +0000
Subject: [PATCH] DiffTool works for flat view (NPE for tree view).

---
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ArchivesRest.java |   25 ++++++++++++++++++-------
 1 files changed, 18 insertions(+), 7 deletions(-)

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 e515bb1..14e2a20 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
@@ -1,6 +1,7 @@
 package de.micromata.borgbutler.server.rest;
 
 import de.micromata.borgbutler.BorgCommands;
+import de.micromata.borgbutler.DiffTool;
 import de.micromata.borgbutler.cache.ButlerCache;
 import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.config.ConfigurationHandler;
@@ -78,13 +79,23 @@
                 .setMaxResultSize(maxSize)
                 .setMode(mode)
                 .setCurrentDirectory(currentDirectory);
-        List<BorgFilesystemItem> items = ButlerCache.getInstance().getArchiveContent(archiveId, force,
-                filter);
-        if (items == null) {
-            return "[{\"mode\": \"notLoaded\"}]";
-        }
-        if (StringUtils.isNotBlank(diffArchiveId)) {
-            log.info("Diff between archives not yet supported.");
+        List<BorgFilesystemItem> items = null;
+        if (StringUtils.isBlank(diffArchiveId)) {
+            // Get file list (without running diff).
+            items = ButlerCache.getInstance().getArchiveContent(archiveId, force,
+                    filter);
+            if (items == null) {
+                return "[{\"mode\": \"notLoaded\"}]";
+            }
+        } else {
+            filter.setMode(FileSystemFilter.Mode.FLAT).setMaxResultSize(-1);
+            items = ButlerCache.getInstance().getArchiveContent(archiveId, true, filter);
+            List<BorgFilesystemItem> diffItems = ButlerCache.getInstance().getArchiveContent(diffArchiveId, true,
+                    filter);
+            items = DiffTool.extractDifferences(items, diffItems);
+            filter.setMaxResultSize(maxSize)
+                    .setMode(mode);
+            filter.reduce(items);
         }
         return JsonUtils.toJson(items, prettyPrinter);
     }

--
Gitblit v1.10.0