borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -112,7 +112,7 @@ //executor.setExitValue(2); //ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); //executor.setWatchdog(watchdog); ExecuteResultHandler handler = new DefaultExecuteResultHandler(); // ExecuteResultHandler handler = new DefaultExecuteResultHandler(); PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream); executor.setStreamHandler(streamHandler); String borgCall = cmdLine.getExecutable() + " " + StringUtils.join(cmdLine.getArguments(), " "); borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
@@ -91,7 +91,8 @@ if (obj instanceof BorgFilesystemItem) { list[i] = (BorgFilesystemItem) obj; } else { log.error("Can't load archive content. FilesystemItem expected, but received: " + obj.getClass() log.error("Can't load archive content. FilesystemItem expected, but received: " + (obj != null ? obj.getClass() : "null") + " at position " + i + "."); return null; } borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -5,10 +5,13 @@ 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 de.micromata.borgbutler.json.borg.BorgArchive; import de.micromata.borgbutler.json.borg.BorgFilesystemItem; import de.micromata.borgbutler.json.borg.BorgRepoList; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.jcs.JCS; import org.apache.commons.jcs.access.CacheAccess; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,12 +27,17 @@ private JCSCache jcsCache; private CacheAccess<String, Repository> repoCacheAccess; private CacheAccess<String, Repository> repoArchivesCacheAccess; private ArchiveFilelistCache archiveFilelistCache; public static ButlerCache getInstance() { return instance; } /** * @param idOrName * @return Repository without list of archives. */ public Repository getRepository(String idOrName) { BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName); Repository repository = repoCacheAccess.get(repoConfig.getRepo()); @@ -43,6 +51,9 @@ return repository; } /** * @return the list of all repositories without the list of archives. */ public List<Repository> getAllRepositories() { List<Repository> repositories = new ArrayList<>(); for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) { @@ -57,6 +68,8 @@ public void clearAllCaches(){ this.repoCacheAccess.clear(); log.info("Clearing repositories cache (with included archives)..."); this.repoArchivesCacheAccess.clear(); log.info("Clearing cache with file lists of archives..."); this.archiveFilelistCache.removeAllCacheFiles(); } @@ -66,19 +79,32 @@ this.repoCacheAccess.clear(); } /* public BorgRepoList getRepoList(String idOrName) { /** * @param idOrName * @return The repository including all archives. */ public Repository getRepositoryArchives(String idOrName) { BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName); //ArchiveInfo archiveInfo = BorgCommands.info(repoConfig, repoConfig.getRepo()); BorgRepoList repoList = repoListCacheAccess.get(repoConfig.getRepo()); if (repoList == null) { repoList = BorgCommands.list(repoConfig); repoListCacheAccess.put(repoConfig.getRepo(), repoList); Repository plainRepository = repoArchivesCacheAccess.get(repoConfig.getRepo()); if (plainRepository != null) { return plainRepository; } plainRepository = repoCacheAccess.get(repoConfig.getRepo()); if (plainRepository == null) { log.warn("Repo with name '" + idOrName + "' not found."); return null; } BorgRepoList repoList = BorgCommands.list(repoConfig); if (repoList == null) { log.warn("Repo with name '" + idOrName + "' not found."); return null; } return repoList; }*/ Repository repository = ObjectUtils.clone(plainRepository); repository.setArchives(repoList.getArchives()); repoArchivesCacheAccess.put(repoConfig.getRepo(), repository); return repository; } public BorgFilesystemItem[] getArchiveContent(BorgRepoConfig repoConfig, BorgArchive archive) { if (archive == null || StringUtils.isBlank(archive.getArchive())) { @@ -114,6 +140,7 @@ Configuration configuration = ConfigurationHandler.getConfiguration(); this.jcsCache = JCSCache.getInstance(); this.repoCacheAccess = jcsCache.getJCSCache("repositories"); this.repoArchivesCacheAccess = jcsCache.getJCSCache("repositoriesArchives"); this.archiveFilelistCache = new ArchiveFilelistCache(getCacheDir(), configuration.getCacheArchiveContentMaxDiscSizeMB()); } } borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java
@@ -1,17 +1,19 @@ package de.micromata.borgbutler.data; import de.micromata.borgbutler.config.BorgRepoConfig; import de.micromata.borgbutler.json.borg.BorgArchive; import de.micromata.borgbutler.json.borg.BorgCache; import de.micromata.borgbutler.json.borg.BorgEncryption; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.util.List; /** * Part of Borg json objects to refer objects to repositories. */ public class Repository implements Serializable { public class Repository implements Serializable, Cloneable { private static final long serialVersionUID = 1278802519434516280L; /** * A name describing this config. Only used for displaying purposes. This is automatically set with the name @@ -25,9 +27,6 @@ @Getter @Setter private String id; /** * UTC date. */ @Getter @Setter private String lastModified; @@ -45,6 +44,15 @@ @Setter private BorgEncryption encryption; public Repository() { /** * Might be null. */ @Getter @Setter private List<BorgArchive> archives; @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } } borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
@@ -6,10 +6,13 @@ import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** * Part of Borg json objects to refer objects to repositories. */ public class BorgRepository { public class BorgRepository 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. borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
@@ -6,6 +6,7 @@ import de.micromata.borgbutler.data.Repository; import de.micromata.borgbutler.json.borg.BorgArchive; import de.micromata.borgbutler.json.borg.BorgFilesystemItem; import org.apache.commons.collections4.CollectionUtils; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,22 +34,22 @@ } assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size()); } /* { { for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) { BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo()); Repository repository = ButlerCache.getInstance().getRepositoryArchives(repoConfig.getRepo()); } assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size()); }*/ } List<BorgRepoConfig> repoConfigs = ConfigurationHandler.getConfiguration().getRepoConfigs(); BorgArchive archive = null; BorgRepoConfig repoConfig = null; /* if (CollectionUtils.isNotEmpty(repoConfigs)) { if (CollectionUtils.isNotEmpty(repoConfigs)) { repoConfig = repoConfigs.get(0); BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo()); if (repoList != null && CollectionUtils.isNotEmpty(repoList.getArchives())) { archive = repoList.getArchives().get(0); Repository rerepositoryoList = ButlerCache.getInstance().getRepositoryArchives(repoConfig.getRepo()); if (rerepositoryoList != null && CollectionUtils.isNotEmpty(rerepositoryoList.getArchives())) { archive = rerepositoryoList.getArchives().get(0); } }*/ } { if (archive != null) { BorgFilesystemItem[] content = ButlerCache.getInstance().getArchiveContent(repoConfig, archive); borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java
@@ -4,8 +4,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.LocalDateTime; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -14,12 +12,6 @@ @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()); assertEquals("2018-11-21T22:31:51",DateUtils.get("2018-11-21T22:31:51.000000")); } }