From 4cfee76202effb5cf2e74e77284da3f055457979 Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 9 Feb 2020 15:24:04 +0000 Subject: [PATCH] Change layout of library storage --- .../common/dependencies/Dependency.java | 4 ++ .../dependencies/DependencyManager.java | 39 +++++++++++-------- .../luckperms/common/util/MoreFiles.java | 19 +++++++++ 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java b/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java index 1027b6a23..a7ee3680b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java +++ b/common/src/main/java/me/lucko/luckperms/common/dependencies/Dependency.java @@ -343,6 +343,10 @@ public enum Dependency { } */ + public String getFileName() { + return name().toLowerCase().replace('_', '-') + "-" + this.version; + } + public List getUrls() { return this.urls; } diff --git a/common/src/main/java/me/lucko/luckperms/common/dependencies/DependencyManager.java b/common/src/main/java/me/lucko/luckperms/common/dependencies/DependencyManager.java index 60d559127..c66627ea8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/dependencies/DependencyManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/dependencies/DependencyManager.java @@ -61,6 +61,8 @@ public class DependencyManager { private final LuckPermsPlugin plugin; private final MessageDigest digest; private final DependencyRegistry registry; + private final Path libsDirectory; + private final EnumMap loaded = new EnumMap<>(Dependency.class); private final Map, IsolatedClassLoader> loaders = new HashMap<>(); private RelocationHandler relocationHandler = null; @@ -73,6 +75,22 @@ public class DependencyManager { throw new RuntimeException(e); } this.registry = new DependencyRegistry(plugin); + + this.libsDirectory = this.plugin.getBootstrap().getDataDirectory().resolve("libs"); + try { + MoreFiles.createDirectoriesIfNotExists(this.libsDirectory); + } catch (IOException e) { + throw new RuntimeException("Unable to create libs directory", e); + } + + Path oldLibsDirectory = this.plugin.getBootstrap().getDataDirectory().resolve("lib"); + if (Files.exists(oldLibsDirectory)) { + try { + MoreFiles.deleteDirectory(oldLibsDirectory); + } catch (IOException e) { + e.printStackTrace(); + } + } } private synchronized RelocationHandler getRelocationHandler() { @@ -82,16 +100,6 @@ public class DependencyManager { return this.relocationHandler; } - private Path getSaveDirectory() { - Path saveDirectory = this.plugin.getBootstrap().getDataDirectory().resolve("lib"); - try { - MoreFiles.createDirectoriesIfNotExists(saveDirectory); - } catch (IOException e) { - throw new RuntimeException("Unable to create lib directory", e); - } - return saveDirectory; - } - public IsolatedClassLoader obtainClassLoaderWith(Set dependencies) { ImmutableSet set = ImmutableSet.copyOf(dependencies); @@ -129,8 +137,6 @@ public class DependencyManager { } public void loadDependencies(Set dependencies) { - Path saveDirectory = getSaveDirectory(); - // create a list of file sources List sources = new ArrayList<>(); @@ -141,7 +147,7 @@ public class DependencyManager { } try { - Path file = downloadDependency(saveDirectory, dependency); + Path file = downloadDependency(dependency); sources.add(new Source(dependency, file)); } catch (Throwable e) { this.plugin.getLogger().severe("Exception whilst downloading dependency " + dependency.name()); @@ -163,7 +169,7 @@ public class DependencyManager { } Path input = source.file; - Path output = input.getParent().resolve("remapped-" + input.getFileName().toString()); + Path output = this.libsDirectory.resolve(source.dependency.getFileName() + "-remapped.jar"); // if the remapped file exists already, just use that. if (Files.exists(output)) { @@ -201,9 +207,8 @@ public class DependencyManager { } } - private Path downloadDependency(Path saveDirectory, Dependency dependency) throws Exception { - String fileName = dependency.name().toLowerCase() + "-" + dependency.getVersion() + ".jar"; - Path file = saveDirectory.resolve(fileName); + private Path downloadDependency(Dependency dependency) throws Exception { + Path file = this.libsDirectory.resolve(dependency.getFileName() + ".jar"); // if the file already exists, don't attempt to re-download it. if (Files.exists(file)) { diff --git a/common/src/main/java/me/lucko/luckperms/common/util/MoreFiles.java b/common/src/main/java/me/lucko/luckperms/common/util/MoreFiles.java index 37ee3326c..3521691ab 100644 --- a/common/src/main/java/me/lucko/luckperms/common/util/MoreFiles.java +++ b/common/src/main/java/me/lucko/luckperms/common/util/MoreFiles.java @@ -26,6 +26,7 @@ package me.lucko.luckperms.common.util; import java.io.IOException; +import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; @@ -57,4 +58,22 @@ public final class MoreFiles { return path; } + public static void deleteDirectory(Path path) throws IOException { + if (!Files.exists(path) || !Files.isDirectory(path)) { + return; + } + + try (DirectoryStream contents = Files.newDirectoryStream(path)) { + for (Path file : contents) { + if (Files.isDirectory(file)) { + deleteDirectory(file); + } else { + Files.delete(file); + } + } + } + + Files.delete(path); + } + }