From 747660aef567bb4216734eaa65be9480babfc8c8 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Wed, 23 Jan 2019 06:15:03 +0000
Subject: [PATCH] #26: Tree browsing bug for mount points or directories not delivered separately by Borg.
---
borgbutler-webapp/src/components/views/archives/FileListEntry.jsx | 6 +++---
borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java | 13 +++++++++++--
borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java | 41 +++++++++++++++++++++++++++++++++++------
3 files changed, 49 insertions(+), 11 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java
index 6f8e431..b1bd68e 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/FileSystemFilter.java
@@ -104,7 +104,7 @@
if (topLevel == null) {
continue;
}
- if (set.contains(topLevel) == false) {
+ if (!set.contains(topLevel)) {
set.add(topLevel);
BorgFilesystemItem topItem = subDirectories.get(topLevel);
if (topItem == null) {
@@ -192,7 +192,16 @@
return false;
}
if (!subDirectories.containsKey(topLevelDir)) {
- subDirectories.put(topLevelDir, item);
+ if (!item.getPath().endsWith(topLevelDir)) {
+ // Mount point? Top level was not received from Borg as separate item. Create a synthetic one (without file number):
+ BorgFilesystemItem syntheticItem = new BorgFilesystemItem()
+ .setPath(topLevelDir)
+ .setDisplayPath(topLevelDir)
+ .setType("d");
+ subDirectories.put(topLevelDir, syntheticItem);
+ } else {
+ subDirectories.put(topLevelDir, item);
+ }
}
return true;
}
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java
index 243b8bb..bb4e295 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/data/FileSystemFilterTest.java
@@ -6,8 +6,7 @@
import java.util.ArrayList;
import java.util.List;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.*;
public class FileSystemFilterTest {
@Test
@@ -29,7 +28,15 @@
}
}
list = filter.reduce(list);
- assertEquals(2, list.size());
+ assertEquals(3, list.size());
+ assertEquals("home", list.get(0).getDisplayPath());
+ assertEquals("etc", list.get(1).getDisplayPath());
+ assertEquals("opt", list.get(2).getDisplayPath());
+ assertEquals("opt", list.get(2).getPath());
+ assertEquals(-1, list.get(2).getFileNumber());
+ assertEquals("d", list.get(2).getType());
+ assertNull(list.get(2).getMode()); // Synthetic file item.
+
list = createList();
filter.setCurrentDirectory("home");
for (BorgFilesystemItem item : list) {
@@ -40,18 +47,34 @@
list = filter.reduce(list);
assertEquals(4, list.size());
assertEquals("admin", list.get(0).getDisplayPath());
+ assertEquals("drwxr-xr-x", list.get(0).getMode());
assertEquals("kai", list.get(1).getDisplayPath());
+ assertEquals("drwxr-xr-x", list.get(1).getMode());
assertEquals(".bashrc", list.get(2).getDisplayPath());
+ assertEquals("-rw-r--r--", list.get(2).getMode());
assertEquals(".borgbutler", list.get(3).getDisplayPath());
+ list = createList();
+ filter.setCurrentDirectory("opt");
+ for (BorgFilesystemItem item : list) {
+ if (filter.matches(item)) {
+ // Do nothing.
+ }
+ }
+ list = filter.reduce(list);
+ assertEquals(2, list.size());
+ assertEquals("openhab", list.get(0).getDisplayPath());
+ assertEquals("vbox-backups", list.get(1).getDisplayPath());
}
private BorgFilesystemItem create(String path, boolean directory) {
BorgFilesystemItem item = new BorgFilesystemItem().setPath(path);
if (directory) {
- item.setType("d");
+ item.setType("d")
+ .setMode("drwxr-xr-x");
} else {
- item.setType("-");
+ item.setType("-")
+ .setMode("-rw-r--r--");
}
return item;
}
@@ -59,7 +82,7 @@
private List<BorgFilesystemItem> createList() {
List<BorgFilesystemItem> list = new ArrayList<>();
list.add(create("home", true));
- list.add(create("home/admin", false));
+ list.add(create("home/admin", true));
list.add(create("home/kai", true));
list.add(create("home/kai/borg/cache", false));
list.add(create("home/kai/borg/config", false));
@@ -69,6 +92,12 @@
list.add(create("home/.borgbutler", true));
list.add(create("etc/apache", true));
list.add(create("etc/apache/http.conf", false));
+ // opt is not given by borg, because opt is in this example a mount point.
+ list.add(create("opt/openhab", true));
+ list.add(create("opt/openhab/addons", true));
+ list.add(create("opt/openhab/conf", true));
+ list.add(create("opt/vbox-backups", true));
+ list.add(create("opt/vbox-backups/Oracle_VM_VirtualBox_Extension_Pack-4.3.32-103443.vbox-extpack", false));
return list;
}
}
diff --git a/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx b/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
index f1a330b..8d92be9 100644
--- a/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
+++ b/borgbutler-webapp/src/components/views/archives/FileListEntry.jsx
@@ -69,9 +69,9 @@
let iconBan = <div className={'btn'}><IconBan/></div>;
let iconCheck = <div className={'btn'}><IconCheck/></div>;
- let icon1 = iconCheck;
+ let icon1 = entry.fileNumber >= 0 ? iconCheck : '';
let icon1Tooltip = '';
- if (!this.state.thisDownloaded) {
+ if (!this.state.thisDownloaded && entry.fileNumber >= 0) {
const icon1Id = `icon1-${entry.fileNumber}`;
icon1 = <div id={icon1Id} className={'btn'}
onClick={() => this.download(this.props.archive.id, entry.fileNumber, true)}>
@@ -82,7 +82,7 @@
}
let icon2 = '';
let icon2Tooltip = '';
- if (this.props.diffArchiveId) {
+ if (this.props.diffArchiveId && entry.fileNumber >= 0) {
icon2 = iconCheck;
if (!this.state.otherDownloaded) {
const icon2Id = `icon2-${entry.fileNumber}`;
--
Gitblit v1.10.0