From 2663312dfbc28853ba8a633104b788ebdf0b463a Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Tue, 31 Jul 2018 13:28:39 +0800 Subject: [PATCH] Auto-rename after upgrade --- .../jackhuang/hmcl/upgrade/UpdateHandler.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java index fb309a5d6..5c414da7a 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java @@ -32,6 +32,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.swing.JOptionPane; @@ -121,6 +123,23 @@ public final class UpdateHandler { private static void applyUpdate(Path target) throws IOException { LocalRepository.applyTo(target); + + Optional newVersion = LocalRepository.getStored().map(LocalVersion::getVersion); + if (newVersion.isPresent()) { + Optional newFilename = tryRename(target, newVersion.get()); + if (newFilename.isPresent()) { + LOG.info("Move " + target + " to " + newFilename.get()); + try { + Files.move(target, newFilename.get()); + target = newFilename.get(); + } catch (IOException e) { + LOG.log(Level.WARNING, "Failed to move target", e); + } + } + } else { + LOG.warning("Failed to find local repository"); + } + startJava(target); } @@ -173,6 +192,18 @@ public final class UpdateHandler { }); } + private static Optional tryRename(Path path, String newVersion) { + String filename = path.getFileName().toString(); + Matcher matcher = Pattern.compile("^(?[hH][mM][cC][lL][.-])(?\\d+(?:\\.\\d+)*)(?\\.[^.]+)$").matcher(filename); + if (matcher.find()) { + String newFilename = matcher.group("prefix") + newVersion + matcher.group("suffix"); + if (!newFilename.equals(filename)) { + return Optional.of(path.resolveSibling(newFilename)); + } + } + return Optional.empty(); + } + // ==== support for old versions === private static void performMigration() throws IOException { LOG.info("Migrating from old versions");