From 41daf2acb8954a168a3ef370ba9633a41b51ac11 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Fri, 14 Dec 2018 17:54:01 +0000
Subject: [PATCH] Renamed Borg json objects. Started with own objects, such as Repository.
---
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java | 4
borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java | 6
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveStats.java | 2
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java | 31 ++-
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgStats.java | 2
borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java | 26 +-
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgEncryption.java | 2
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoList.java | 8
borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java | 7
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java | 28 +-
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java | 7
borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java | 36 ++--
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgCache.java | 4
borgbutler-webapp/src/components/views/repos/RepoArchiveList.jsx | 104 +++++++++++++
borgbutler-webapp/src/components/views/repos/RepoCard.jsx | 2
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java | 2
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java | 2
borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java | 25 +++
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveInfo.java | 10
borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java | 50 ++++++
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java | 59 +++----
borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java | 15 +
borgbutler-webapp/src/components/views/repos/RepoListView.jsx | 2
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoInfo.java | 8
24 files changed, 316 insertions(+), 126 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 86e5c39..1a01d23 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -4,8 +4,10 @@
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
import de.micromata.borgbutler.config.Definitions;
+import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.JsonUtils;
import de.micromata.borgbutler.json.borg.*;
+import de.micromata.borgbutler.utils.DateUtils;
import org.apache.commons.exec.*;
import org.apache.commons.exec.environment.EnvironmentUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -29,22 +31,31 @@
* @param repoConfig
* @return Parsed repo config returned by Borg command.
*/
- public static RepoInfo info(BorgRepoConfig repoConfig) {
+ public static Repository info(BorgRepoConfig repoConfig) {
String json = execute(repoConfig, "info", repoConfig.getRepo(), "--json");
if (json == null) {
return null;
}
- RepoInfo repoInfo = JsonUtils.fromJson(RepoInfo.class, json);
+ BorgRepoInfo repoInfo = JsonUtils.fromJson(BorgRepoInfo.class, json);
repoInfo.setOriginalJson(json);
- return repoInfo;
+ Repository repository = new Repository();
+ BorgRepository borgRepository = repoInfo.getRepository();
+ repository.setId(borgRepository.getId())
+ .setLastModified(DateUtils.get(borgRepository.getLastModified()))
+ .setLocation(borgRepository.getLocation())
+ .setName(borgRepository.getName())
+ .setCache(repoInfo.getCache())
+ .setEncryption(repoInfo.getEncryption())
+ .setSecurityDir(repoInfo.getSecurityDir());
+ return repository;
}
- public static RepoList list(BorgRepoConfig repoConfig) {
+ public static BorgRepoList list(BorgRepoConfig repoConfig) {
String json = execute(repoConfig, "list", repoConfig.getRepo(), "--json");
if (json == null) {
return null;
}
- RepoList repoList = JsonUtils.fromJson(RepoList.class, json);
+ BorgRepoList repoList = JsonUtils.fromJson(BorgRepoList.class, json);
repoList.setOriginalJson(json);
return repoList;
}
@@ -56,26 +67,26 @@
* @param archive
* @return
*/
- public static ArchiveInfo info(BorgRepoConfig repoConfig, String archive) {
+ public static BorgArchiveInfo info(BorgRepoConfig repoConfig, String archive) {
String json = execute(repoConfig, "info", repoConfig.getRepo() + "::" + archive, "--json");
if (json == null) {
return null;
}
- ArchiveInfo archiveInfo = JsonUtils.fromJson(ArchiveInfo.class, json);
+ BorgArchiveInfo archiveInfo = JsonUtils.fromJson(BorgArchiveInfo.class, json);
archiveInfo.setOriginalJson(json);
return archiveInfo;
}
- public static List<FilesystemItem> listArchiveContent(BorgRepoConfig repoConfig, Archive archive) {
+ public static List<BorgFilesystemItem> listArchiveContent(BorgRepoConfig repoConfig, BorgArchive archive) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
execute(outputStream, repoConfig, "list", repoConfig.getRepo() + "::" + archive.getArchive(),
"--json-lines");
String response = outputStream.toString(Definitions.STD_CHARSET);
- List<FilesystemItem> content = new ArrayList<>();
+ List<BorgFilesystemItem> content = new ArrayList<>();
try (Scanner scanner = new Scanner(response)) {
while (scanner.hasNextLine()) {
String json = scanner.nextLine();
- FilesystemItem item = JsonUtils.fromJson(FilesystemItem.class, json);
+ BorgFilesystemItem item = JsonUtils.fromJson(BorgFilesystemItem.class, json);
content.add(item);
}
}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
index d07ff28..3e272cc 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
@@ -1,8 +1,8 @@
package de.micromata.borgbutler.cache;
import de.micromata.borgbutler.config.BorgRepoConfig;
-import de.micromata.borgbutler.json.borg.Archive;
-import de.micromata.borgbutler.json.borg.FilesystemItem;
+import de.micromata.borgbutler.json.borg.BorgArchive;
+import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import de.micromata.borgbutler.utils.ReplaceUtils;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
@@ -29,10 +29,10 @@
private long FILES_EXPIRE_TIME = 7 * 24 * 3660 * 1000; // Expires after 7 days.
@Getter
- private Archive archive;
- private List<FilesystemItem> content;
+ private BorgArchive archive;
+ private List<BorgFilesystemItem> content;
- public void save(BorgRepoConfig repoConfig, Archive archive, List<FilesystemItem> filesystemItems) {
+ public void save(BorgRepoConfig repoConfig, BorgArchive archive, List<BorgFilesystemItem> filesystemItems) {
File file = getFile(repoConfig, archive);
if (CollectionUtils.isEmpty(filesystemItems)) {
return;
@@ -40,7 +40,7 @@
log.info("Saving archive content as file list: " + file.getAbsolutePath());
try (ObjectOutputStream outputStream = new ObjectOutputStream(new BufferedOutputStream(new GzipCompressorOutputStream(new FileOutputStream(file))))) {
outputStream.writeObject(filesystemItems.size());
- for (FilesystemItem item : filesystemItems) {
+ for (BorgFilesystemItem item : filesystemItems) {
outputStream.writeObject(item);
}
outputStream.writeObject("EOF");
@@ -57,7 +57,7 @@
* @param archive
* @return
*/
- public FilesystemItem[] load(BorgRepoConfig repoConfig, Archive archive) {
+ public BorgFilesystemItem[] load(BorgRepoConfig repoConfig, BorgArchive archive) {
File file = getFile(repoConfig, archive);
if (!file.exists()) {
return null;
@@ -65,13 +65,13 @@
return load(file);
}
- public FilesystemItem[] load(File file) {
+ public BorgFilesystemItem[] load(File file) {
if (file.exists() == false) {
log.error("File '" + file.getAbsolutePath() + "' doesn't exist. Can't get archive content files.");
return null;
}
log.info("Loading archive content as file list from: " + file.getAbsolutePath());
- FilesystemItem[] list = null;
+ BorgFilesystemItem[] list = null;
try {
// Set last modified time of file:
Files.setAttribute(file.toPath(), "lastModifiedTime", FileTime.fromMillis(System.currentTimeMillis()));
@@ -85,11 +85,11 @@
return null;
}
int size = (Integer) obj;
- list = new FilesystemItem[size];
+ list = new BorgFilesystemItem[size];
for (int i = 0; i < size; i++) {
obj = inputStream.readObject();
- if (obj instanceof FilesystemItem) {
- list[i] = (FilesystemItem) obj;
+ if (obj instanceof BorgFilesystemItem) {
+ list[i] = (BorgFilesystemItem) obj;
} else {
log.error("Can't load archive content. FilesystemItem expected, but received: " + obj.getClass()
+ " at position " + i + ".");
@@ -105,7 +105,7 @@
/**
* Deletes archive contents older than 7 days and deletes the oldest archive contents if the max cache size is
- * exceeded. The last modified time of a file is equals to the last usage by {@link #load(BorgRepoConfig, Archive)}.
+ * exceeded. The last modified time of a file is equals to the last usage by {@link #load(BorgRepoConfig, BorgArchive)}.
*/
public void cleanUp() {
File[] files = cacheDir.listFiles();
@@ -180,7 +180,7 @@
}
}
- File getFile(BorgRepoConfig repoConfig, Archive archive) {
+ File getFile(BorgRepoConfig repoConfig, BorgArchive archive) {
return new File(cacheDir, ReplaceUtils.encodeFilename(CACHE_ARCHIVE_LISTS_BASENAME + archive.getTime()
+ "-" + repoConfig.getRepo() + "-" + archive.getArchive() + ".gz", true));
}
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 92cb63f..76d5431 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
@@ -4,6 +4,7 @@
import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
+import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.borg.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.jcs.JCS;
@@ -22,8 +23,7 @@
private static ButlerCache instance = new ButlerCache();
private JCSCache jcsCache;
- private CacheAccess<String, RepoInfo> repoInfoCacheAccess;
- private CacheAccess<String, RepoList> repoListCacheAccess;
+ private CacheAccess<String, Repository> repoCacheAccess;
private ArchiveFilelistCache archiveFilelistCache;
public static ButlerCache getInstance() {
@@ -31,55 +31,45 @@
}
public Repository getRepository(String idOrName) {
- RepoInfo repoInfo = getRepoInfo(idOrName);
- if (repoInfo == null) {
- return null;
- }
- return repoInfo.getRepository();
- }
-
- public RepoInfo getRepoInfo(String idOrName) {
BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
- RepoInfo repoInfo = repoInfoCacheAccess.get(repoConfig.getRepo());
- if (repoInfo == null ||repoInfo.getRepository() == null) {
- repoInfo = BorgCommands.info(repoConfig);
- repoInfoCacheAccess.put(repoConfig.getRepo(), repoInfo);
+ Repository repository = repoCacheAccess.get(repoConfig.getRepo());
+ if (repository == null ||repository.getLocation() == null) {
+ repository = BorgCommands.info(repoConfig);
+ repoCacheAccess.put(repoConfig.getRepo(), repository);
}
- if (repoInfo == null) {
+ if (repository == null) {
log.warn("Repo with name '" + idOrName + "' not found.");
}
- return repoInfo;
+ return repository;
}
public List<Repository> getAllRepositories() {
List<Repository> repositories = new ArrayList<>();
for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
- RepoInfo repoInfo = getRepoInfo(repoConfig.getName());
- if (repoInfo == null) {
+ Repository repository = getRepository(repoConfig.getName());
+ if (repository == null) {
continue;
}
- repositories.add(repoInfo.getRepository());
+ repositories.add(repository);
}
return repositories;
}
public void clearAllCaches(){
- log.info("Clearing repositories cache (with list of archives)...");
- this.repoListCacheAccess.clear();
- clearRepoInfoCacheAccess();
+ this.repoCacheAccess.clear();
log.info("Clearing cache with file lists of archives...");
this.archiveFilelistCache.removeAllCacheFiles();
}
- public void clearRepoInfoCacheAccess() {
- log.info("Clearing repositories info cache...");
- this.repoInfoCacheAccess.clear();
+ public void clearRepoCacheAccess() {
+ log.info("Clearing repositories cache...");
+ this.repoCacheAccess.clear();
}
- public RepoList getRepoList(String idOrName) {
+/* public BorgRepoList getRepoList(String idOrName) {
BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
//ArchiveInfo archiveInfo = BorgCommands.info(repoConfig, repoConfig.getRepo());
- RepoList repoList = repoListCacheAccess.get(repoConfig.getRepo());
+ BorgRepoList repoList = repoListCacheAccess.get(repoConfig.getRepo());
if (repoList == null) {
repoList = BorgCommands.list(repoConfig);
repoListCacheAccess.put(repoConfig.getRepo(), repoList);
@@ -88,18 +78,18 @@
log.warn("Repo with name '" + idOrName + "' not found.");
}
return repoList;
- }
+ }*/
- public FilesystemItem[] getArchiveContent(BorgRepoConfig repoConfig, Archive archive) {
+ public BorgFilesystemItem[] getArchiveContent(BorgRepoConfig repoConfig, BorgArchive archive) {
if (archive == null || StringUtils.isBlank(archive.getArchive())) {
return null;
}
- FilesystemItem[] items = archiveFilelistCache.load(repoConfig, archive);
+ BorgFilesystemItem[] items = archiveFilelistCache.load(repoConfig, archive);
if (items == null) {
- List<FilesystemItem> list = BorgCommands.listArchiveContent(repoConfig, archive);
+ List<BorgFilesystemItem> list = BorgCommands.listArchiveContent(repoConfig, archive);
if (CollectionUtils.isNotEmpty(list)) {
archiveFilelistCache.save(repoConfig, archive, list);
- items = list.toArray(new FilesystemItem[0]);
+ items = list.toArray(new BorgFilesystemItem[0]);
}
}
if (items == null) {
@@ -108,7 +98,7 @@
return items;
}
- public FilesystemItem[] getArchiveContent(File file) {
+ public BorgFilesystemItem[] getArchiveContent(File file) {
return archiveFilelistCache.load(file);
}
@@ -123,8 +113,7 @@
private ButlerCache() {
Configuration configuration = ConfigurationHandler.getConfiguration();
this.jcsCache = JCSCache.getInstance();
- this.repoInfoCacheAccess = jcsCache.getJCSCache("repoInfo");
- this.repoListCacheAccess = jcsCache.getJCSCache("repoList");
+ this.repoCacheAccess = jcsCache.getJCSCache("repositories");
this.archiveFilelistCache = new ArchiveFilelistCache(getCacheDir(), configuration.getCacheArchiveContentMaxDiscSizeMB());
}
}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java
new file mode 100644
index 0000000..9db8ee3
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java
@@ -0,0 +1,50 @@
+package de.micromata.borgbutler.data;
+
+import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.json.borg.BorgCache;
+import de.micromata.borgbutler.json.borg.BorgEncryption;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * Part of Borg json objects to refer objects to repositories.
+ */
+public class Repository implements Serializable {
+ private static final long serialVersionUID = 1278802519434516280L;
+ /**
+ * A name describing this config. Only used for displaying purposes. This is automatically set with the name
+ * of the repository configuration.
+ *
+ * @see BorgRepoConfig#getName()
+ */
+ @Getter
+ @Setter
+ String name;
+ @Getter
+ @Setter
+ private String id;
+ /**
+ * UTC date.
+ */
+ @Getter
+ @Setter
+ private String lastModified;
+ @Getter
+ @Setter
+ private String location;
+
+ @Getter
+ @Setter
+ private String securityDir;
+ @Getter
+ @Setter
+ private BorgCache cache;
+ @Getter
+ @Setter
+ private BorgEncryption encryption;
+
+ public Repository() {
+ }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java
similarity index 93%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java
index 0f76eb6..9bc6cce 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive.java
@@ -10,7 +10,7 @@
/**
* This object is given by <tt>borg list repo</tt>.
*/
-public class Archive implements Serializable {
+public class BorgArchive implements Serializable {
private static final long serialVersionUID = -7872260170265536732L;
@Getter
private String archive;
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java
similarity index 90%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java
index 2c4c81b..3ed36d9 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchive2.java
@@ -9,7 +9,7 @@
/**
* This object is given by <tt>borg list archive</tt>.
*/
-public class Archive2 implements Serializable {
+public class BorgArchive2 implements Serializable {
private static final long serialVersionUID = 4734056884088174992L;
@Getter
@JsonProperty("chunker_params")
@@ -25,7 +25,7 @@
@Getter
private String start;
@Getter
- private ArchiveStats stats;
+ private BorgArchiveStats stats;
@Getter
private String username;
public String toString() {
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveInfo.java
similarity index 68%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveInfo.java
index d158aa4..b719bfe 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveInfo.java
@@ -10,16 +10,16 @@
/**
* Result of <tt>borg info repo::archive</tt>.
*/
-public class ArchiveInfo implements Serializable {
+public class BorgArchiveInfo implements Serializable {
private static final long serialVersionUID = -4200553322856662346L;
@Getter
- private List<Archive2> archives;
+ private List<BorgArchive2> archives;
@Getter
- private Cache cache;
+ private BorgCache cache;
@Getter
- private Encryption encryption;
+ private BorgEncryption encryption;
@Getter
- private Repository repository;
+ private BorgRepository repository;
@Getter
@Setter
@JsonIgnore
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveStats.java
similarity index 90%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveStats.java
index e6cfa28..a8b855d 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgArchiveStats.java
@@ -5,7 +5,7 @@
import java.io.Serializable;
-public class ArchiveStats implements Serializable {
+public class BorgArchiveStats implements Serializable {
private static final long serialVersionUID = -7603297185652222010L;
@Getter
@JsonProperty("compressed_size")
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgCache.java
similarity index 73%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgCache.java
index 4184750..dbe8268 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgCache.java
@@ -4,10 +4,10 @@
import java.io.Serializable;
-public class Cache implements Serializable {
+public class BorgCache implements Serializable {
private static final long serialVersionUID = -1728825838475013561L;
@Getter
private String path;
@Getter
- private Stats stats;
+ private BorgStats stats;
}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgEncryption.java
similarity index 79%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgEncryption.java
index c206e48..6f88c3e 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgEncryption.java
@@ -4,7 +4,7 @@
import java.io.Serializable;
-public class Encryption implements Serializable {
+public class BorgEncryption implements Serializable {
private static final long serialVersionUID = -4867140003118289187L;
@Getter
private String mode;
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/FilesystemItem.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
similarity index 92%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/FilesystemItem.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
index 623f738..7a196bd 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/FilesystemItem.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgFilesystemItem.java
@@ -4,7 +4,7 @@
import java.io.Serializable;
-public class FilesystemItem implements Serializable {
+public class BorgFilesystemItem implements Serializable {
private static final long serialVersionUID = -5545350851640655468L;
/**
* d (directory), - (file)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoInfo.java
similarity index 76%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoInfo.java
index a424182..507769b 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoInfo.java
@@ -10,17 +10,17 @@
/**
* Result of borg info repo
*/
-public class RepoInfo implements Serializable {
+public class BorgRepoInfo implements Serializable {
private static final long serialVersionUID = -1588038325129799400L;
@Getter
@JsonProperty("security_dir")
private String securityDir;
@Getter
- private Cache cache;
+ private BorgCache cache;
@Getter
- private Encryption encryption;
+ private BorgEncryption encryption;
@Getter
- private Repository repository;
+ private BorgRepository repository;
@Getter
@Setter
@JsonIgnore
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoList.java
similarity index 71%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoList.java
index c9842ae..a5dd6e8 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepoList.java
@@ -10,14 +10,14 @@
/**
* Result of borg list repo
*/
-public class RepoList implements Serializable {
+public class BorgRepoList implements Serializable {
private static final long serialVersionUID = 1006757749929526034L;
@Getter
- private List<Archive> archives;
+ private List<BorgArchive> archives;
@Getter
- private Encryption encryption;
+ private BorgEncryption encryption;
@Getter
- private Repository repository;
+ private BorgRepository repository;
@Getter
@Setter
@JsonIgnore
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
similarity index 85%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
index 26da4c3..a12db4f 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
@@ -6,13 +6,10 @@
import lombok.Getter;
import lombok.Setter;
-import java.io.Serializable;
-
/**
* Part of Borg json objects to refer objects to repositories.
*/
-public class Repository implements Serializable {
- private static final long serialVersionUID = 1278802519434516280L;
+public class BorgRepository {
/**
* A name describing this config. Only used for displaying purposes. This is automatically set with the name
* of the repository configuration.
@@ -36,7 +33,7 @@
* @param location
* @return
*/
- public Repository setLocation(String location) {
+ public BorgRepository setLocation(String location) {
this.location = location;
// It's ugly but efficiently ;-)
BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(location);
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgStats.java
similarity index 93%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgStats.java
index 4720aee..330e483 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgStats.java
@@ -5,7 +5,7 @@
import java.io.Serializable;
-public class Stats implements Serializable {
+public class BorgStats implements Serializable {
private static final long serialVersionUID = 9141985857856734073L;
@Getter
@JsonProperty("total_chunks")
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java
new file mode 100644
index 0000000..168049d
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/utils/DateUtils.java
@@ -0,0 +1,15 @@
+package de.micromata.borgbutler.utils;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class DateUtils {
+ /**
+ * @param borgDateTime
+ * @return
+ */
+ public static String get(String borgDateTime) {
+ LocalDateTime dateTime = LocalDateTime.parse(borgDateTime);
+ return dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
+ }
+}
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java
index 84ac637..642a3ff 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/ArchiveFilelistCacheTest.java
@@ -1,8 +1,8 @@
package de.micromata.borgbutler.cache;
import de.micromata.borgbutler.config.BorgRepoConfig;
-import de.micromata.borgbutler.json.borg.Archive;
-import de.micromata.borgbutler.json.borg.FilesystemItem;
+import de.micromata.borgbutler.json.borg.BorgArchive;
+import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,17 +24,17 @@
@Test
void readWriteTest() throws Exception {
- List<FilesystemItem> list = createList(1000000);
+ List<BorgFilesystemItem> list = createList(1000000);
ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out"), 100);
cache.removeAllCacheFiles();
BorgRepoConfig repoConfig = new BorgRepoConfig();
repoConfig.setRepo("repo");
- Archive archive = createArchive("2018-12-10");
+ BorgArchive archive = createArchive("2018-12-10");
log.info("Saving " + list.size() + " items to out dir.");
cache.save(repoConfig, archive, list);
log.info("Saving done.");
log.info("Loading items from out dir.");
- FilesystemItem[] filesystemItems = cache.load(repoConfig, archive);
+ BorgFilesystemItem[] filesystemItems = cache.load(repoConfig, archive);
log.info("Loading " + filesystemItems.length + " items done.");
assertEquals(list.size(), filesystemItems.length);
for (int i = 0; i < filesystemItems.length; i++) {
@@ -45,22 +45,22 @@
@Test
void readWriteEmptyTest() throws Exception {
- List<FilesystemItem> list = new ArrayList<>();
+ List<BorgFilesystemItem> list = new ArrayList<>();
ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out"), 100);
cache.removeAllCacheFiles();
BorgRepoConfig repoConfig = new BorgRepoConfig();
repoConfig.setRepo("repo");
- Archive archive = createArchive("2018-12-09");
+ BorgArchive archive = createArchive("2018-12-09");
assertNull(cache.load(repoConfig, archive));
cache.save(repoConfig, archive, list);
- FilesystemItem[] filesystemItems = cache.load(repoConfig, archive);
+ BorgFilesystemItem[] filesystemItems = cache.load(repoConfig, archive);
assertNull(cache.load(repoConfig, archive));
cache.removeAllCacheFiles();
}
@Test
void cleanUpMaximumSizeTest() throws Exception {
- List<FilesystemItem> list = createList(1000000);
+ List<BorgFilesystemItem> list = createList(1000000);
ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out"), 3);
cache.removeAllCacheFiles();
BorgRepoConfig repoConfig = new BorgRepoConfig();
@@ -68,7 +68,7 @@
long millis = System.currentTimeMillis();
- Archive archive = createArchive("2018-11-20");
+ BorgArchive archive = createArchive("2018-11-20");
cache.save(repoConfig, archive, list);
File oldestFile = cache.getFile(repoConfig, archive);
setLastModificationTime(oldestFile, millis - 10 * 3600000); // Fake lastModifiedTime - 10 h
@@ -96,7 +96,7 @@
@Test
void cleanUpExpiredTest() throws Exception {
- List<FilesystemItem> list = createList(1000);
+ List<BorgFilesystemItem> list = createList(1000);
ArchiveFilelistCache cache = new ArchiveFilelistCache(new File("out"), 3);
cache.removeAllCacheFiles();
BorgRepoConfig repoConfig = new BorgRepoConfig();
@@ -104,7 +104,7 @@
long millis = System.currentTimeMillis();
- Archive archive = createArchive("2018-10-20");
+ BorgArchive archive = createArchive("2018-10-20");
cache.save(repoConfig, archive, list);
File notExpiredFile = cache.getFile(repoConfig, archive);
setLastModificationTime(notExpiredFile, millis - 6 * 24 * 3600000); // Fake lastModifiedTime - 10 h
@@ -123,16 +123,16 @@
cache.removeAllCacheFiles();
}
- private List<FilesystemItem> createList(int number) throws Exception {
- List<FilesystemItem> list = new ArrayList<>();
+ private List<BorgFilesystemItem> createList(int number) throws Exception {
+ List<BorgFilesystemItem> list = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {
list.add(create(i));
}
return list;
}
- private FilesystemItem create(int i) throws Exception {
- FilesystemItem item = new FilesystemItem();
+ private BorgFilesystemItem create(int i) throws Exception {
+ BorgFilesystemItem item = new BorgFilesystemItem();
set(item, "type", "-").set(item, "mode", "drwxr-xr-x")
.set(item, "user", "kai").set(item, "group", "user")
.set(item, "path", "/Users/kai/Test" + i + ".java").set(item, "size", 1000);
@@ -146,8 +146,8 @@
return this;
}
- private Archive createArchive(String time) throws Exception {
- Archive archive = new Archive();
+ private BorgArchive createArchive(String time) throws Exception {
+ BorgArchive archive = new BorgArchive();
set(archive, "archive", "archive-" + time);
set(archive, "time", time);
return archive;
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
index 86ff0a8..6544eff 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
@@ -3,11 +3,9 @@
import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
-import de.micromata.borgbutler.json.borg.Archive;
-import de.micromata.borgbutler.json.borg.FilesystemItem;
-import de.micromata.borgbutler.json.borg.RepoInfo;
-import de.micromata.borgbutler.json.borg.RepoList;
-import org.apache.commons.collections4.CollectionUtils;
+import de.micromata.borgbutler.data.Repository;
+import de.micromata.borgbutler.json.borg.BorgArchive;
+import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,29 +29,29 @@
ButlerCache butlerCache = ButlerCache.getInstance();
{
for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
- RepoInfo repoInfo = ButlerCache.getInstance().getRepoInfo(repoConfig.getRepo());
+ Repository repository = ButlerCache.getInstance().getRepository(repoConfig.getRepo());
}
assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
}
- {
+/* {
for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
- RepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
+ BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
}
assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
- }
+ }*/
List<BorgRepoConfig> repoConfigs = ConfigurationHandler.getConfiguration().getRepoConfigs();
- Archive archive = null;
+ BorgArchive archive = null;
BorgRepoConfig repoConfig = null;
- if (CollectionUtils.isNotEmpty(repoConfigs)) {
+/* if (CollectionUtils.isNotEmpty(repoConfigs)) {
repoConfig = repoConfigs.get(0);
- RepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
+ BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
if (repoList != null && CollectionUtils.isNotEmpty(repoList.getArchives())) {
archive = repoList.getArchives().get(0);
}
- }
+ }*/
{
if (archive != null) {
- FilesystemItem[] content = ButlerCache.getInstance().getArchiveContent(repoConfig, archive);
+ BorgFilesystemItem[] content = ButlerCache.getInstance().getArchiveContent(repoConfig, archive);
log.info("Number of items (content) of archive: " + content.length);
content = ButlerCache.getInstance().getArchiveContent(repoConfig, archive);
log.info("Number of items (content) of archive: " + content.length);
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java
new file mode 100644
index 0000000..31425e0
--- /dev/null
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java
@@ -0,0 +1,25 @@
+package de.micromata.borgbutler.utils;
+
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.time.LocalDateTime;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+
+public class DateUtilsTest {
+ private static Logger log = LoggerFactory.getLogger(DateUtilsTest.class);
+
+ @Test
+ void parseTest() {
+ LocalDateTime dateTime = DateUtils.get("2018-11-21T22:31:51.000000");
+ assertEquals(2018, dateTime.getYear());
+ assertEquals(11, dateTime.getMonthValue());
+ assertEquals(21, dateTime.getDayOfMonth());
+ assertEquals(22, dateTime.getHour());
+ assertEquals(31, dateTime.getMinute());
+ assertEquals(51, dateTime.getSecond());
+ }
+}
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java
index f050f12..0be23d8 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/Main.java
@@ -1,7 +1,7 @@
package de.micromata.borgbutler.server;
import de.micromata.borgbutler.cache.ButlerCache;
-import de.micromata.borgbutler.json.borg.FilesystemItem;
+import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
import de.micromata.borgbutler.server.jetty.JettyServer;
import de.micromata.borgbutler.server.user.SingleUserManager;
import de.micromata.borgbutler.server.user.UserManager;
@@ -132,7 +132,7 @@
private static void printArchiveContent(String fileName) {
File file = new File(fileName);
- FilesystemItem[] fileList = ButlerCache.getInstance().getArchiveContent(file);
+ BorgFilesystemItem[] fileList = ButlerCache.getInstance().getArchiveContent(file);
boolean parseFormatExceptionPrinted = false;
if (fileList != null && fileList.length > 0) {
TimeZone tz = TimeZone.getTimeZone("UTC");
@@ -142,7 +142,7 @@
File out = new File(FilenameUtils.getBaseName(fileName) + ".txt.gz");
log.info("Writing file list to: " + out.getAbsolutePath());
try (PrintWriter writer = new PrintWriter(new BufferedOutputStream(new GzipCompressorOutputStream(new FileOutputStream(out))))) {
- for (FilesystemItem item : fileList) {
+ for (BorgFilesystemItem item : fileList) {
String time = item.getMtime();
try {
Date date = df.parse(item.getMtime());
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
index 06839f9..8812d65 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
@@ -1,8 +1,9 @@
package de.micromata.borgbutler.server.rest;
import de.micromata.borgbutler.cache.ButlerCache;
+import de.micromata.borgbutler.data.Repository;
import de.micromata.borgbutler.json.JsonUtils;
-import de.micromata.borgbutler.json.borg.Repository;
+import de.micromata.borgbutler.json.borg.BorgRepository;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,12 +40,12 @@
*
* @param force If true, a reload of all repositories is forced.
* @param prettyPrinter If true then the json output will be in pretty format.
- * @return A list of repositories of type {@link Repository}.
+ * @return A list of repositories of type {@link BorgRepository}.
* @see JsonUtils#toJson(Object, boolean)
*/
public String getList(@QueryParam("force") boolean force, @QueryParam("prettyPrinter") boolean prettyPrinter) {
if (force) {
- ButlerCache.getInstance().clearRepoInfoCacheAccess();
+ ButlerCache.getInstance().clearRepoCacheAccess();
}
List<Repository> repositories = ButlerCache.getInstance().getAllRepositories();
if (CollectionUtils.isEmpty(repositories)) {
diff --git a/borgbutler-webapp/src/components/views/repos/RepoArchiveList.jsx b/borgbutler-webapp/src/components/views/repos/RepoArchiveList.jsx
new file mode 100644
index 0000000..57ff200
--- /dev/null
+++ b/borgbutler-webapp/src/components/views/repos/RepoArchiveList.jsx
@@ -0,0 +1,104 @@
+import React from 'react'
+import {PageHeader} from '../../general/BootstrapComponents';
+import {getRestServiceUrl} from '../../../utilities/global';
+import ErrorAlert from '../../general/ErrorAlert';
+import {IconRefresh} from "../../general/IconComponents";
+
+class RepoListView extends React.Component {
+
+
+ path = getRestServiceUrl('repos');
+ state = {
+ isFetching: false
+ };
+
+ componentDidMount = () => {
+ this.fetchRepos();
+ };
+
+ fetchRepos = (force) => {
+ this.setState({
+ isFetching: true,
+ failed: false,
+ repos: undefined
+ });
+ fetch(`${this.path}/list?force=${force}`, {
+ method: 'GET',
+ headers: {
+ 'Accept': 'application/json'
+ }
+ })
+ .then(response => response.json())
+ .then(json => {
+ const repos = json.map(repo => {
+ return {
+ id: repo.id,
+ name: repo.name,
+ location: repo.location,
+ lastModified: repo.last_modified
+ };
+ });
+
+ this.setState({
+ isFetching: false,
+ repos
+ })
+ })
+ .catch(() => this.setState({isFetching: false, failed: true}));
+ };
+
+ render = () => {
+ let content = undefined;
+
+ if (this.state.isFetching) {
+
+ content = <i>Loading...</i>;
+
+ } else if (this.state.failed) {
+
+ content = <ErrorAlert
+ title={'Cannot load Repositories'}
+ description={'Something went wrong during contacting the rest api.'}
+ action={{
+ handleClick: this.fetchRepos,
+ title: 'Try again'
+ }}
+ />;
+
+ } else if (this.state.repos) {
+
+ content = <React.Fragment>
+ <div
+ className={'btn btn-outline-primary refresh-button-right'}
+ onClick={this.fetchRepos.bind(this, true)}
+ >
+ <IconRefresh/>
+ </div>
+ <CardDeck>
+ {this.state.repos.map(repo => {
+ return <RepoCard
+ key={repo.id}
+ repo={repo}
+ />;
+ })}
+ </CardDeck>
+ </React.Fragment>;
+
+ }
+
+ return <React.Fragment>
+ <PageHeader>
+ Repositories
+ </PageHeader>
+ {content}
+ </React.Fragment>;
+ };
+
+ constructor(props) {
+ super(props);
+
+ this.fetchRepos = this.fetchRepos.bind(this);
+ }
+}
+
+export default RepoListView;
diff --git a/borgbutler-webapp/src/components/views/repos/RepoCard.jsx b/borgbutler-webapp/src/components/views/repos/RepoCard.jsx
index 951db17..81df17c 100644
--- a/borgbutler-webapp/src/components/views/repos/RepoCard.jsx
+++ b/borgbutler-webapp/src/components/views/repos/RepoCard.jsx
@@ -27,7 +27,7 @@
{repoText}
</ul>
</CardBody>
- <CardFooter><span className={'lastModified'}>Last modified: {formatDateTime(repo.lastModified)}</span></CardFooter>
+ <CardFooter><span className={'lastModified'}>Last modified: {repo.lastModified}</span></CardFooter>
</Card>
</React.Fragment>
};
diff --git a/borgbutler-webapp/src/components/views/repos/RepoListView.jsx b/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
index 5cb3030..f5e8233 100644
--- a/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
+++ b/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
@@ -38,7 +38,7 @@
id: repo.id,
name: repo.name,
location: repo.location,
- lastModified: repo.last_modified
+ lastModified: repo.lastModified
};
});
--
Gitblit v1.10.0