From f159a2250c9b622024ed24176d5dcfc8cca2f481 Mon Sep 17 00:00:00 2001 From: Myles Date: Sat, 20 Aug 2016 13:47:09 +0100 Subject: [PATCH] SemVer compatibility, also change up the messages a bit. --- .../myles/ViaVersion/update/UpdateUtil.java | 12 ++++--- .../us/myles/ViaVersion/update/Version.java | 31 ++++++++++++++----- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java b/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java index f85e938d2..fa06fe35f 100644 --- a/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java +++ b/src/main/java/us/myles/ViaVersion/update/UpdateUtil.java @@ -23,7 +23,7 @@ public class UpdateUtil { public final static String PREFIX = ChatColor.GREEN + "" + ChatColor.BOLD + "[ViaVersion] " + ChatColor.GREEN; private final static String URL = "http://api.spiget.org/v2/resources/"; private final static int PLUGIN = 19254; - private final static String LATEST_VERSION = "/versions/latest"; + private final static String LATEST_VERSION = "/versions/latest"; public static void sendUpdateMessage(final UUID uuid, final Plugin plugin) { new BukkitRunnable() { @@ -82,13 +82,17 @@ public class UpdateUtil { try { current = new Version(ViaVersion.getInstance().getVersion()); } catch (IllegalArgumentException e) { - return "You are using a debug/custom version, consider updating."; + return "You are using a custom version, consider updating."; } Version newest = new Version(newestString); if (current.compareTo(newest) < 0) - return "There is a newer version available: " + newest.toString(); + return "There is a newer version available: " + newest.toString() + ", you're on: " + current.toString(); else if (console && current.compareTo(newest) != 0) { - return "You are running a newer version than is released!"; + if (current.getTag().toLowerCase().startsWith("dev") || current.getTag().toLowerCase().startsWith("snapshot")) { + return "You are running a development version, please report any bugs to GitHub."; + } else { + return "You are running a newer version than is released!"; + } } return null; } diff --git a/src/main/java/us/myles/ViaVersion/update/Version.java b/src/main/java/us/myles/ViaVersion/update/Version.java index 118f45de7..d96f4800a 100644 --- a/src/main/java/us/myles/ViaVersion/update/Version.java +++ b/src/main/java/us/myles/ViaVersion/update/Version.java @@ -2,21 +2,26 @@ package us.myles.ViaVersion.update; import org.apache.commons.lang.StringUtils; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class Version implements Comparable { - private int[] parts; + private static Pattern semVer = Pattern.compile("(?0|[1-9]\\d*)\\.(?0|[1-9]\\d*)(?:\\.(?0|[1-9]\\d*))?(?:-(?[A-z0-9.-]*))?"); + private int[] parts = new int[3]; + private String tag; public Version(String value) { if (value == null) throw new IllegalArgumentException("Version can not be null"); - if (!value.matches("^[0-9]+(\\.[0-9]+)*$")) + Matcher matcher = semVer.matcher(value); + if (!matcher.matches()) throw new IllegalArgumentException("Invalid version format"); + parts[0] = Integer.parseInt(matcher.group("a")); + parts[1] = Integer.parseInt(matcher.group("b")); + parts[2] = matcher.group("c") == null ? 0 : Integer.parseInt(matcher.group("c")); - String[] split = value.split("\\."); - parts = new int[split.length]; - - for (int i = 0; i < split.length; i += 1) - parts[i] = Integer.parseInt(split[i]); + tag = matcher.group("tag") == null ? "" : matcher.group("tag"); } public static int compare(Version verA, Version verB) { @@ -33,6 +38,12 @@ public class Version implements Comparable { if (partA > partB) return 1; } + // Simple tag check + if (verA.tag.length() == 0 && verB.tag.length() > 0) + return 1; + if (verA.tag.length() > 0 && verB.tag.length() == 0) + return -1; + return 0; } @@ -47,7 +58,7 @@ public class Version implements Comparable { for (int i = 0; i < parts.length; i += 1) split[i] = String.valueOf(parts[i]); - return StringUtils.join(split, "."); + return StringUtils.join(split, ".") + (tag.length() != 0 ? "-" + tag : ""); } @Override @@ -59,4 +70,8 @@ public class Version implements Comparable { public boolean equals(Object that) { return that instanceof Version && equals(this, (Version) that); } + + public String getTag() { + return tag; + } } \ No newline at end of file