diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginArchiveCleaner.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginArchiveCleaner.java index a671f2d811..4cbdd2fbfa 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginArchiveCleaner.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginArchiveCleaner.java @@ -42,15 +42,17 @@ public class PluginArchiveCleaner { public void cleanup(Path archivePath) throws IOException { - try (Stream pathStream = Files.list(archivePath)) { - List pathList = pathStream - .filter(PluginArchiveCleaner::isAnInstalledPluginDirectory) - .sorted() - .collect(Collectors.toList()); + if (Files.exists(archivePath)) { + try (Stream pathStream = Files.list(archivePath)) { + List pathList = pathStream + .filter(PluginArchiveCleaner::isAnInstalledPluginDirectory) + .sorted() + .collect(Collectors.toList()); - for (int i = 0; i <= pathList.size() - MAX_ARCHIVE_COUNT; i++) { - LOG.debug("Delete old installation directory {}", pathList.get(i)); - IOUtil.deleteSilently(pathList.get(i).toFile()); + for (int i = 0; i <= pathList.size() - MAX_ARCHIVE_COUNT; i++) { + LOG.debug("Delete old installation directory {}", pathList.get(i)); + IOUtil.deleteSilently(pathList.get(i).toFile()); + } } } } diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginArchiveCleanerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginArchiveCleanerTest.java index 2cc7efaae3..956f6051fa 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginArchiveCleanerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginArchiveCleanerTest.java @@ -115,5 +115,11 @@ class PluginArchiveCleanerTest { assertThat(tmp).exists(); assertThat(tmp).isEmptyDirectory(); } + + @Test + void shouldNotFailWhenDirectoryDoesNotExists(@TempDir Path tmp) throws IOException { + Path notExistingPath = tmp.resolve(".installed"); + cleaner.cleanup(notExistingPath); + } }